不能借X作为不可变的因为它也被借用为可变的

时间:2016-10-25 01:17:30

标签: rust

在一个简单的游戏循环中,我active_player指向2个玩家对象中的一个。

let mut active_player = &mut self.player1;
loop {
     // do stuff with active_player

    println!("{} {}", self.player1.last_move(), self.player2.last_move());

    // Switch to next player
}

问题来自于我尝试阅读self.player1.last_move()我理解为什么我会收到错误但我不知道解决此问题的正确模式。这是active_player应该是Rc吗?

的实例

1 个答案:

答案 0 :(得分:1)

可变借用的范围扩展了loop的整个主体。 Here is a simple reproduction of your issue

你可以通过将可变借入的范围移​​到loop来限制可变借用的范围......也许是这样:

loop {
    {
        let mut active_player = &mut self.player1; // or perhaps self.get_active_player(); ?
        // ... do stuff with active_player ...
    }

    println!("{} {}", self.player1.last_move(), self.player2.last_move());

    // Switch to next player
}

Here is a Gist that fixes it, as above