プリミティブ(int、boolなど)を参照で渡したいのですが。私はそれについての議論を見つけました(段落「参照による値型の受け渡し」) 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
}
そうしたくない場合は、問題を回避する別の方法を見つける必要があります。
参照渡しする必要があると思う人の1つの例は、クラス内の関数に渡したい何らかの値があるということです。
class Foo {
void doFoo() {
var i = 0;
...
doBar(i); // We want to alter i in doBar().
...
i++;
}
void doBar(i) {
i++;
}
}
この場合、代わりにi
をクラスメンバーにすることができます。
いいえ、ラッパーが唯一の方法です。
それらは参照渡しされます。 「プリミティブ」タイプには内部値を変更するメソッドがないため、問題はありません。
私が間違っている場合は修正してください。「参照渡し」の意味を誤解している可能性がありますか?私はあなたがparam1 = 10
のようなことをしたいと思い、メソッドから戻ったときにこの値が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++開発者が「パラメータはポインタとして渡される」と言うことを意味します。