2016-10-25 24 views
1

在一个简单的游戏循环中,我有active_player指向2个玩家对象之一。不能借X作为不可改变的,因为它也被借用为可变

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

可变借位的范围扩展了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

+0

那么,这个想法是,第一次通过循环'active_player'是self.player1,下次是player2,然后回到player1。通过改变'active_player'的范围,我失去了谁是主动球员,这是需要切换到下一个球员 – Shaun

+0

是的,你的解决方案将工作。直到现在,我没有尝试写下“切换到下一个玩家”的部分......这会遇到多次借入问题。我只需要用一个整数或者其他东西来跟踪活动球员 – Shaun

+0

我想你可能会把“积极球员”的逻辑变成一种自己的方法。如果不知道游戏其他部分的内部情况,我不能真正建议你如何去解决这个问题。 –

相关问题