是否可以修改 Dart 中参数的引用?
Posted
技术标签:
【中文标题】是否可以修改 Dart 中参数的引用?【英文标题】:Is it possible to modify the reference of an argument in Dart? 【发布时间】:2019-08-12 02:21:46 【问题描述】:不确定标题中的术语是否 100% 正确,但这个例子很容易说明我的意思:
class MyClass
String str = '';
MyClass(this.str);
void main()
MyClass obj1 = MyClass('obj1 initial');
print(obj1.str);
doSomething(obj1);
print(obj1.str);
doSomethingElse(obj1);
print(obj1.str);
void doSomething(MyClass obj)
obj.str = 'obj1 new string';
void doSomethingElse(MyClass obj)
obj = MyClass('obj1 new object');
这将打印出来
obj1 initial
obj1 new string
obj1 new string
但是,如果我希望 doSomethingElse()
实际修改 obj1
所引用的内容,那么输出将是:
obj1 initial
obj1 new string
obj1 new object
这在 Dart 中是否可行,如果可以,如何实现?
【问题讨论】:
【参考方案1】:不,Dart 不通过引用传递参数。 (如果没有 C++ 的复杂类型系统和规则,如果调用者没有将参数绑定到变量,它会如何工作还不清楚。)
您可以添加一个间接级别(即,通过将 obj1
放在另一个对象中,例如 List
、Map
或您自己的类)。另一种可能是让doSomethingElse
成为一个嵌套函数,然后它可以直接访问和修改封闭范围内的变量。
【讨论】:
【参考方案2】:你在那个函数中有一个引用问题,
当您在 main your 中调用 doSomethingElse(obj1)
时,
MyObject obj
参数引用obj1值,
那么obj
你引用的是MyClass('obj1 new objcet')
,
并且您没有更改主目录中的 obj1
引用
void doSomethingElse(MyClass obj) // let's say we gave the parameter obj1
// here obj referencing the obj1 value
obj = MyClass('obj1 new object');
//and then it is referencing the MyClass('obj1 new object') value
//nothing change for obj1 it still referencing the same value
您可以像这样返回该对象并引用该对象,
class MyClass
String str = '';
MyClass(this.str);
void main()
MyClass obj1 = MyClass('obj1 initial');
print(obj1.str);
doSomething(obj1);
print(obj1.str);
obj1 = doSomethingElse();
print(obj1.str);
void doSomething(MyClass obj)
obj.str = 'obj1 new string';
MyClass doSomethingElse()
return MyClass('obj1 new object');
输出:
【讨论】:
以上是关于是否可以修改 Dart 中参数的引用?的主要内容,如果未能解决你的问题,请参考以下文章