<分区>
我正在制作一款基于图 block 的游戏,其结构跨越多个图 block 。结构下的每个图 block 都必须具有对该结构的可变引用。对于跨越两个图 block 的结构,表示 map 的二维数组必须同时包含对该结构的两个可变引用。
我还有一个列表,它可变地拥有我所有的结构(用于迭代)
我用 &mut
试过但失败了:
let mut all_structures: Vec<Box<Structure>> = Vec::new();
let mut grid: [[Vec<&mut Box<Structure>>; 4]; 4] = Default::default(); // accessed [y][x]
let mut house: Box<Structure> = Box::new(House { });
grid[1][1].push(&mut house);
grid[1][2].push(&mut house);
all_structures.push(house);
有错误:
error[E0499]: cannot borrow `house` as mutable more than once at a time
--> src/main.rs:21:21
|
20 | grid[1][1].push(&mut house);
| ---------- first mutable borrow occurs here
21 | grid[1][2].push(&mut house);
| ---- ^^^^^^^^^^ second mutable borrow occurs here
| |
| first borrow later used by call
现在这只是单线程,所以不需要线程安全
我把代码放到playground上了