私はプリミティブ(int、bool、...)を参照渡ししたいと思います。私はそれについての議論を見つけました(段落「参照渡しの値型を渡す」):value types in Dart、しかし、私はDartでそれを行う方法があるかどうかまだ疑問に思っています(オブジェクトラッパーを使用しています)?どんな開発ですか?Dartで参照によってプリミティブパラメータを渡す方法はありますか?
答えて
ダーツの言語はこれをサポートしていませんが、私はそれがこれからどうなるかは疑いますが、未来は伝えます。あなたがそれを行うにはしたくない場合は
class PrimitiveWrapper {
var value;
PrimitiveWrapper(this.value);
}
void alter(PrimitiveWrapper data) {
data.value++;
}
main() {
var data = new PrimitiveWrapper(5);
print(data.value); // 5
alter(data);
print(data.value); // 6
}
、:
プリミティブが値によって渡され、既にここで言及される、「参照渡しプリミティブ」への唯一の方法は次のようにそれらをラップすることですあなたの問題を回避する別の方法を見つける必要があります。私は人々が参照渡しする必要がご覧
一つのケースは、彼らがクラス内の関数に渡す値のいくつかの並べ替えを持っていることである。この場合、
class Foo {
void doFoo() {
var i = 0;
...
doBar(i); // We want to alter i in doBar().
...
i++;
}
void doBar(i) {
i++;
}
}
あなただけi
クラスを作ることができます代わりにメンバー。
ラッパーは一般的ではありませんが、この言語ではこの改善が可能です。 – mezoni
あなたがジェネリックスに入っている場合は、必ず進んでください。私はこれがポイントを説明する最も簡単な方法だと信じています。 :) –
あなたの答え - ダーツの言語はこれをサポートしていません。何が問題なの?これは、DartとDart2JSでこの機能を実装することができます。 Javascriptへの効果的なコンパイルのために、多くの提案された機能を実装し、構造化することができます。ダーツチームがバグ修正とWebクライアントの改善に焦点を当てていたという問題。私はこれが将来実現されると思います。これを防ぐ問題は見つけられませんでした。あなたの仕事はコンパイラの設計とはかけ離れていると思いますか?私は正しいですよ? – mezoni
いいえ、ラッパーは唯一の方法です。
これは参照渡しです。 "プリミティブ"型には内部値を変更するメソッドがないため、問題ではありません。
私が間違っている場合は私を修正しますが、「参照渡し」とは何かを誤解している可能性がありますか?私はあなたがのようなことをしたいと思っていて、あなたの方法から戻るときにこの値をまだ10
にしたいと思っています。しかし、参照はポインタではありません。パラメータに新しい値(=演算子)を割り当てると、この変更は呼び出し元のメソッドに反映されません。これは、非プリミティブ型(クラス)の場合でも同じです。
例:
class Test {
int val;
Test(this.val);
}
void main() {
Test t = new Test(1);
fn1(t);
print(t.val); // 2
fn2(t);
print(t.val); // still 2, because "t" has been assigned a new instance in fn2()
}
void fn1(Test t) {
print(t.val); // 1
t.val = 2;
}
void fn2(Test t) {
t = new Test(10);
print(t.val); // 10
}
EDIT 私はコメントに基づいて、私の答えは、より明確にしようとしたが、どういうわけか、私は右より多くの混乱を招くことなく、フレーズ、それに見えることはできません。基本的に、Javaから来ている人が「パラメータは参照渡し」と言われると、「パラメータがポインタとして渡される」と言ってC/C++開発者が何を意味するのかを意味します。
@ mezoni:あなたの定義が正確に「参照渡し」という意味ではありませんか?パラメータが値渡しされた場合、私の例でfn1()は動作しませんでしたか? – MarioP
私の主張は、ダーツには本当のプリミティブ型がないということでした。 num、int、double、bool - これらはすべてオブジェクトであり、パラメータとして渡されたときに "複雑な"クラスと同じように動作します。また、私たちは同じことを意味していると思います。 「参照渡し」とは、オブジェクトへの参照が渡され、関数の戻り後にオブジェクトメンバーの変更が残っていることを意味します。今私たちは同じページにいますか? :) – MarioP
誰かが私の答えでこれをもっと明確にする方法があれば、それを編集しても構いません。 :/ – MarioP
- 1. Javaでメソッド参照を渡す方法はありますか?
- 2. メンバ関数を参照によってメソッドに渡す方法はありますか? [JAVA]
- 3. MASM:参照によって値を渡す方法
- 4. 参照によってデータメンバーを渡す
- 5. 参照によってベクトルを渡す
- 6. Mockitoを使ってMocked Dart Servicesに複雑な引数を渡す方法はありますか?
- 7. ポインタ配列を関数に渡して参照渡しする方法はありますか?
- 8. Javaの戻り参照値(または参照によって)
- 9. この場合、参照によって値を渡す方法は?
- 10. C++での参照によってクラスオブジェクトを返す方法は?
- 11. ng-repeatから別の要素にアイテムを渡す方法や参照する方法はありますか?
- 12. 渡されているオブジェクト内から参照によって自己を渡す方法はありますか?
- 13. 参照によってラムダをキャプチャするのを防ぐ方法はありますか?
- 14. OCamlには参照渡し機能がありますか?
- 15. cで参照によってintを渡す?
- 16. カスタムでconst参照によってベクトルを渡すと、C++
- 17. C++で参照によってstd algos述語を渡す
- 18. カスタムオブジェクトが値渡しであるか、フラグメントとアクティビティの参照によって渡されますか?
- 19. なぜこのプログラムは参照によってパラメータを渡すのですか?
- 20. イベントハンドラ関数に引数を渡しても、 'this'参照を使用する方法はありますか?
- 21. @Inputデコレータから子コンポーネントへの値ではなく、参照によって親プロパティを渡す方法はありますか?
- 22. Ruby/Chef:リソース 'name'を参照して関数に渡す方法はありますか?
- 23. のJava:によって値パスまたは参照渡し
- 24. メモリ内の別のアドレスを間接参照することによって、特定のアドレスをメモリ内に逆参照する方法はありますか?
- 25. は値によって、参照により両方が
- 26. Dartにはスケジューラがありますか?
- 27. WebSphere Libertyに参照渡し設定がありますか?
- 28. Excelでワークブックを動的に参照する方法はありますか?
- 29. 渡す方法の参照はエラー
- 30. 別のオブジェクトへの参照によってオブジェクトを渡す
私は不思議です、あなたのユースケースは何ですか?なぜあなたはこれをしたいのですか? –
@ ShailenTuliあなたは自分自身をすべてと見なしますか?その違いは何ですか?私たちはすべて一度生き、すべての人が異なっています。そして、私たちは皆異なる興味を持っています。非常にまれにしか使用しないものがあります。しかし、これは彼らが必要でないことを意味するものではありません。 – mezoni
申し訳ありませんが、私はコメントを理解していません。私は単に質問者の意図を理解しようとしています。 –