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
似乎是做同样事情的明显方法。
这不会改变 '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
似乎是做同样事情的明显方法。