我在想办法
Vec
共个枚举。请忽略排序机制本身,这只是一个简单的示例。
use std::cmp::Ordering;
enum MyEnum {
Option1,
Option2,
}
fn main() {
let mut my_list: Vec<MyEnum> = vec![MyEnum::Option1, MyEnum::Option2, MyEnum::Option1];
// (1) - doesn't work
my_list.sort_unstable_by(|a, b| match (*a, *b) {
(MyEnum::Option1, MyEnum::Option1) => Ordering::Equal,
(MyEnum::Option1, MyEnum::Option2) => Ordering::Less,
_ => Ordering::Greater
});
}
我得到以下错误:
error[E0507]: cannot move out of borrowed content
--> src/main.rs:12:44
|
12 | my_list.sort_unstable_by(|a, b| match (*a, *b) {
| ^^ cannot move out of borrowed content
以下两种变体适用:
// (2)
my_list.sort_unstable_by(|a, _b| match *a {
MyEnum::Option1 => Ordering::Less,
MyEnum::Option2 => Ordering::Greater
});
// (3)
my_list.sort_unstable_by(|a, b| match (a, b) {
(&MyEnum::Option1, &MyEnum::Option1) => Ordering::Equal,
(&MyEnum::Option1, &MyEnum::Option2) => Ordering::Less,
_ => Ordering::Greater
});
当我想匹配普通引用时,我可以取消引用它(变体2);为什么在变量1的元组中不起作用?
我理解为什么3能起作用,但我很难理解1中的具体动作发生在哪里,以及如何以不同的方式进行。