【发布时间】:2020-07-24 08:19:56
【问题描述】:
我是 Dart 的新手,尝试在循环中更改 Object 的成员值时遇到了很多问题。
我的对象是这样定义的:
class Cell {
int magicnum, x, y;
Cell(this.magicnum);
toString() {
return ("$magicnum - [$x][$y]");
}
}
我创建了一个单元列表列表(二维数组),然后我需要根据数组中每个对象的位置填充 x 和 y 值。
for (int x = 0; x < DIM; x++) {
for (int y = 0; y < DIM; y++) {
grids[x][y].x = x;
grids[x][y].y = y;
}
}
这显然行不通,因为在 Dart 中,所有内容(也是整数)都是一个对象,因此,我数组中的所有 Cell 对象都具有相同的 x 和 y 值(它们都得到了对同一对象的引用)。 我该怎么办?
谢谢
@julemand101 数组是这样制作的:
List<Cell> cells = List<Cell>.generate(DIM, (i) => Cell(i + 1));
List<List<Cell>> grids = List<List<Cell>>();
for (int i = 0; i < DIM; i++) {
grids.add(shuffleCell(cells));
}
【问题讨论】:
-
你试过了吗? int 不是一个可变对象,所以当你说
x++时,你实际上是在创建一个新实例(在 OOP 意义上)并且不会修改现有实例(理论上......实际上 int 被表示为幕后的普通 int )。 -
因此,如果您确实尝试过并且仍然看到网格中的所有对象共享相同的变量,可能是因为您在创建二维数组时忘记创建一个新的
Cell对象每个坐标? -
您能否提供一个完整的运行示例(可以粘贴到例如dartpad.dev)来显示问题?我很难猜测你们每个组件是如何绑定在一起的。
-
是的。 link
-
另外,您似乎只创建了一次单元格,但在
grids中为每个网格共享它们?
标签: dart reference variable-assignment