2016-10-25 5 views
1

単純なゲームループでは、active_playerが2人のプレーヤーオブジェクトの1つを指しています。は、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_playerRcになるインスタンスですか?

答えて

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

"アクティブプレイヤーを獲得する"ロジックをおそらく自分自身の方法に移すことができると思います。あなたのゲームの残りの部分の内部を知らないと、私はあなたがそれについてどうやって行くのか本当に示唆することはできません。 –

関連する問題