【发布时间】:2017-05-03 14:27:48
【问题描述】:
我似乎掉进了这个被称为“与借用检查器作斗争”的洞里。我有以下功能:
fn draw_pair(decks: &(&mut Deck, &mut Deck)) -> (Card, Card) {
let (&mut p1, &mut p2) = decks;
(p1.draw_card(), p2.draw_card())
}
我收到以下错误:
expected type: &(&mut Deck, &mut Deck)
found type: (_, _)
这个想法是对元组的内容进行可变引用。我认为没有理由改变元组本身。该函数将循环运行。
我尝试改写let &(&mut p1, &mut p2) = decks;,但它告诉我它无法移出借来的内容。
这是调用draw_pair的函数:
fn play(decks: (Deck, Deck)) {
loop {
let cards = draw_pair(&decks);
// actual game not yet implemented
}
}
这也给了我一个错误,说它需要&(&mut Deck, &mut Deck),但得到&(Deck, Deck)。
【问题讨论】:
-
您将 &(Deck, Deck) 传递给您的 draw_pair 函数,而不是预期的 &(&mut Deck, &mut Deck)。
-
@SplittyDev 我知道这一点。
-
@SplittyDev 我手头的数据默认是不可变的
-
我刚刚更新了我的答案以包含更好的代码版本,没有丑陋的克隆和元组引用。
标签: rust borrow-checker