Rust 模式匹配选项的强制移动
我有一个玩具21点程序的以下代码:Rust 模式匹配选项的强制移动,rust,Rust,我有一个玩具21点程序的以下代码: fn winner(self) -> Option<Player> { let mut ranking: Vec<_> = self.players.iter().filter(|p| p.score() <= 21).collect(); ranking.sort_by(|a,b|a.score().cmp(&b.score())); match ranking.pop() {
fn winner(self) -> Option<Player> {
let mut ranking: Vec<_> = self.players.iter().filter(|p| p.score() <= 21).collect();
ranking.sort_by(|a,b|a.score().cmp(&b.score()));
match ranking.pop() {
Some(ranking_first) => match ranking.pop() {
Some(ranking_second) if ranking_second.score() == ranking_first.score() => None,
_ => Some(ranking_first),
},
None => None,
}
}
我想强制玩家移动,这样它在游戏结束后仍然可用。对于这个例子,我可以简单地实现Clone/Copy,但我想了解为什么会发生这种情况。是否有一种方法可以使用move而不是ref来匹配某个()?谢谢。使用
让mut-ranking:Vec=…
检查排名的类型
;我怀疑它是Vec
,因为iter
在引用上返回一个迭代器。是的,正如Matthieu M.所说,你似乎想进入iter()
而不是iter()
。是的,就是这样。谢谢如何将评论标记为答案?@spease您不需要,但您可以要求评论者提供答案。如果他们不愿意这样做,那么(在适当的情况下给予积分)并接受它是完全可以的。使用let mut ranking:Vec=…
检查排名的类型;我怀疑它是Vec
,因为iter
在引用上返回一个迭代器。是的,正如Matthieu M.所说,你似乎想进入iter()
而不是iter()
。是的,就是这样。谢谢如何将评论标记为答案?@spease您不需要,但您可以要求评论者提供答案。如果他们不愿意这样做,那么(在适当的情况下给予信用)并接受它是完全可以的。
error[E0308]: mismatched types
--> src/lib.rs:126:27
|
126 | _ => Some(ranking_first),
| ^^^^^^^^^^^^^ expected struct `Player`, found &Player
|
= note: expected type `Player`
found type `&Player`