我尝试使示例代码尽可能简单
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 生成一个 actor。一个 GameManager 作为一个关卡,我希望所有生成的 actor 都能引用 GameManager 的关卡。
有人可以向我解释这个错误吗?我该如何修复它?
最佳答案
这在 Rust 中似乎是不可能的。
但是我找到了一个解决方案来做到这一点,我只需要封装更多一点,比如
struct Level;
pub struct ActorController{
lvl: Level
}
pub struct GameManager<'self>{
actors: ~[Actor<'self>],
actor_controller: ActorController
}
struct Actor<'self>{
lvl: &'self Level
}
impl ActorController {
fn spawn_actor<'r>(&'r self) -> Actor<'r>{
Actor{lvl: &'r self.lvl}
}
}
impl<'self> GameManager <'self> {
pub fn new() -> GameManager{
GameManager {actors: ~[], actor_controller: ActorController{lvl: Level}}
}
}
fn main() {
let mut gm = GameManager::new();
let actor1 = gm.actor_controller.spawn_actor();
gm.actors.push(actor1);
}
关于rust - 借用“self”问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18140088/