Rust 同时可变地访问同一结构的不同字段

Rust 同时可变地访问同一结构的不同字段,rust,mutable,borrow-checker,lifetime-scoping,Rust,Mutable,Borrow Checker,Lifetime Scoping,我正试着用Rust写一个纸牌游戏,但在借书台遇到了一些麻烦。我主要的结构是游戏,看起来像这样 struct Game { players: HashMap<String, Player>, deck: Vec<Card>, } 现在我自然想从Game.deck impl Game { fn draw_cards(&mut self, num: usize) -> Option<Vec<Card>> {

我正试着用Rust写一个纸牌游戏,但在借书台遇到了一些麻烦。我主要的
结构
游戏
,看起来像这样

struct Game {
    players: HashMap<String, Player>,
    deck: Vec<Card>,
}
现在我自然想从
Game.deck

impl Game {
    fn draw_cards(&mut self, num: usize) -> Option<Vec<Card>> {
        if self.deck.len() >= num {
            let mut cards: Vec<Card> = Vec::new();
            for _ in 0..num {
                cards.push(self.deck.pop().unwrap());
            }
            Some(cards)
        } else {
            None
        }
    }
}

这不起作用,因为迭代键时会借用
self
,但必须可变地借用才能调用
draw\u to\u player

error[E0502]:无法将“*self”作为可变项借用,因为“self.players”也作为不可变项借用
-->src/main.rs:48:13
|
47 |用于self.players.keys()中的名称{
|------此处发生不可变借用
48 |自我。平局球员(姓名,2);
|^^^^^此处发生可变借用
49 |         }
|-不可变的借阅到此结束
如何解决这个问题?

尝试内部易变性:-),可能使用RefCell?。大声思考…尝试内部易变性:-),可能使用RefCell?。大声思考。。。
struct Card {
    text: String,
}
impl Game {
    fn draw_cards(&mut self, num: usize) -> Option<Vec<Card>> {
        if self.deck.len() >= num {
            let mut cards: Vec<Card> = Vec::new();
            for _ in 0..num {
                cards.push(self.deck.pop().unwrap());
            }
            Some(cards)
        } else {
            None
        }
    }
}
impl Game {
    fn draw_to_player(&mut self, name: &String, num: usize) -> Result<(), ()> {
        let cards = self.draw_cards(num);
        match cards {
            Some(mut cards) => {
                let player = self.players.get_mut(name);
                match player {
                    Some(player) => {
                        player.hand.append(&mut cards);
                        Ok(())
                    },
                    None => Err(()),
                }
            },
            None => Err(()),
        }
}
fn draw_for_all(&mut self) {
    for name in self.players.keys() {
        self.draw_to_player(name, 2);
    }
}