サンプルコードをできるだけシンプルにしようとしました
struct Level;
pub struct GameManager<'self>{
lvl: Level,
actors: ~[Actor<'self>]
}
struct Actor<'self>{
lvl: &'self Level
}
impl<'self> GameManager <'self> {
pub fn new() -> GameManager{
GameManager {lvl: Level,actors: ~[]}
}
fn spawn_actor<'r>(&'r self) -> Actor<'r>{
Actor{lvl: &'r self.lvl}
}
}
fn main() {
let mut gm = GameManager::new();
let mut actor1 = gm.spawn_actor();
gm.actors.push(actor1);
}
エラー:
/home/maik/source/test.rs:23:4: 23:13 error: cannot borrow `gm.actors` as mutable because it is also borrowed as immutable
/home/maik/source/test.rs:23 gm.actors.push(actor1);
^~~~~~~~~
/home/maik/source/test.rs:21:21: 21:23 note: second borrow of `gm.actors` occurs here
/home/maik/source/test.rs:21 let mut actor1 = gm.spawn_actor();
ご覧のとおり、GameManager にアクターをスポーンさせたいと考えています。レベルとしての GameManager と、スポーンされたすべてのアクターが GameManager のレベルへの参照を持つようにします。
誰かが私にこのエラーを説明できますか? どうすれば修正できますか?