我有一个例程,它会处理容器中的对象,并引用存储在另外两个容器中的这些对象。
然而,我没有找到Rust的解决方法,生命周期推断似乎禁止了这种操作,我不知道该如何解决。
fn main() {
let mut deck : Deck = Deck::new();
let mut p1 : Hand = Hand::new();
let mut p2 : Hand = Hand::new();
do_hands(|data: &[Card]| -> Result<(),()> {
for card in data {
deck.insert(card.id, CardCell::new(*card));
let card: &CardCell = deck.get_mut(&card.id).unwrap();
handle_hand(&mut card, &mut p1, &mut p2);
}
return Ok(());
});
}
这是完整的游乐场链接:https://play.rust-lang.org/?gist=6079ade83e3fcf06f35397eac2e82d05&version=nightly。它与 IT 技术有关。请注意,保留了 HTML 标签。
_card
的引用不能像现在这样存储在p1
或p2
中,因为card
的生命周期比p1
/p2
更短,因为它是在闭包内创建的。换句话说,您可能需要在闭包外部创建card
,以便它具有与p1
/p2
相同的生命周期。 - bowhandle_card
的签名,以便它可以在当前设置下工作:在闭包内创建卡片。但是,如果您确实打算推回到p1
/p2
,则必须以另一种方式创建卡片,以确保其引用的生命周期与p1
/p2
相同。 - bow