Rust 模式匹配选项的强制移动

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() {

我有一个玩具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() {
        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`