Dart:更改对象的引用

Dart : change reference of object

这不会改变 'myStuff.stuff' 的值,它的值仍然是 'start' :

void main() {

 Thing myStuff = Thing();
 myStuff.stuff = 'start';
 doStuff(myStuff);
 print(myStuff.stuff);

}

void doStuff(Thing theStuff) {
 theStuff = Thing();
 theStuff.stuff = 'test';
}

class Thing {
 String stuff = '';
}

如何替换函数中的引用对象?

您不能用您显示的方法执行此操作。 Dart 而不是 通过引用传递。它是按值传递的。

如果您希望能够做类似的事情,您可以用另一个对象包装您的 Thing 对象,或者提供一个修改原始对象的回调。

包装器 class 方法的这些内容:

void main() {
  Thing myStuff = Thing();
  myStuff.stuff = 'start';
  
  ThingWrap wrapper = ThingWrap();
  wrapper.thing = myStuff;
  
  doStuff1(wrapper);
  
  print(wrapper.thing.stuff);
}

void doStuff1(ThingWrap theStuff) {
 var newStuff = Thing();
 newStuff.stuff = 'test';
  
  theStuff.thing = newStuff;
}

class Thing {
 String stuff = '';
}

class ThingWrap {
  Thing thing = Thing();
}

或回调方式:

void main() {
  Thing myStuff = Thing();
  myStuff.stuff = 'start';
  
  doStuff1((newVal) {
    myStuff = newVal;
  });
  
  print(myStuff.stuff);
}

void doStuff1(Function(Thing) callback) {
  var newStuff = Thing();
  newStuff.stuff = 'test';
  callback(newStuff);
}

class Thing {
 String stuff = '';
}

根据您提供的示例,为什么您想要执行此操作还不是很清楚。如果提供了这一点,则可能提供更清洁的解决方案。简单地为 doStuff 提供一个 return 值并将其分配给 main 中的 myStuff 似乎是做同样事情的明显方法。