【发布时间】:2020-08-16 19:56:02
【问题描述】:
考虑一下这个飞镖代码:
T t = T() // id field defaults to null
List<T> list = List()..add(t);
t.id = '123';
print('${list.first.id}') // What's output?
我的问题是传递给List 的项目是否被复制到List 或者它是一个参考。
我遇到了这种歧义,因为我使用的是flutter_redux,其中一个动作包含T 类的一个实例。在 reducer 上,我将这个 T 实例添加到我的状态中。稍后,在中间件中,我更新了这个 t 的 ID。但令人惊讶的是,状态(在本例中为列表)上的 id 字段也发生了变化!所以我唯一的猜测是对象是通过引用传递的。这个假设正确吗?
【问题讨论】:
-
Dart 没有复制构造函数。 List 不可能创建深层副本,即使它想这样做,因为一般情况下是不可能的。
标签: flutter dart flutter-redux