假设我有一个代表棋盘的值
val board: Vector[Vector[Option[Piece]]] = ...
并且在某些函数中应用移动我使用制表来构建一个新的板
Vector.tabulate(8,8)(
(x,y) =>
if (x,y) == (start_x,start_y)
None
else if (x,y) == (end_x,end_y)
board(start_x)(start_y)
else
board(x)(y)
)
此片段的内存使用量是否会保持不变,因为只更改了两个单元格?换句话说,数据是否被重用?
答案 0 :(得分:2)
不,新电路板和旧电路板之间不会有结构共享。如果你在这段代码之后抛出旧的电路板,内存将是不变的,但使用尽可能多的旧电路板会更有效。尝试:
val piece = board(start_x)(start_y)
val board2 = board.updated(start_x, board(start_x).updated(start_y, None))
val newboard = board2.updated(end_x, board2(end_x).updated(end_y, piece))