我想通过引用传递一个原语(int,bool,...)。我在这里找到了关于它的讨论(段落“通过引用传递值类型”): Dart中的值类型,但我仍然想知道是否有办法在Dart中做到这一点(除了使用对象包装器)?任何发展?
我想通过引用传递一个原语(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
}
如果您不想这样做,那么您需要找到解决问题的另一种方法。
我看到人们需要通过引用传递的一种情况是,他们想要传递给类中的函数的某种值:
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
}
编辑 根据评论,我试图让我的答案更清楚,但不知何故,我似乎无法在没有造成更多混淆的情况下说出正确的答案。基本上,当来自Java的人说“参数通过引用传递”时,它们意味着C / C ++开发人员会说“参数作为指针传递”。