【发布时间】:2021-10-24 06:00:49
【问题描述】:
嘿,我正在学习 rust 并试图弄清楚为什么我不能直接比较一个非常简单的 Enum 的两个实例,我尝试使用 matches!(不起作用)和 #[derive(Eq)](只是转发问题发给impl
这是一个演示我的问题的 sn-p,它是输出。
#[derive(Debug)]
pub enum MyEnum {
Enum1,
Enum2,
Enum3
}
#[derive(Debug)]
pub enum ThingEnum {
NoOp,
Enum(MyEnum)
}
pub fn test_enum_equate() {
let mut enum1 = Vec::new();
enum1.push(MyEnum::Enum1);
enum1.push(MyEnum::Enum2);
enum1.push(MyEnum::Enum3);
let mut expr = vec![
ThingEnum::NoOp,
ThingEnum::Enum(MyEnum::Enum1),
ThingEnum::Enum(MyEnum::Enum2),
ThingEnum::NoOp,
ThingEnum::Enum(MyEnum::Enum3)
];
for myenum in enum1.iter() {
for entry in expr.iter() {
match entry {
ThingEnum::NoOp => continue,
ThingEnum::Enum(en) => {
// Check if they are the same
println!("matches!({:?}, {:?}) = {}",
myenum, en, matches!(myenum, en)
);
// Need to implement partial eq, WHY?
// println!("{:?} == {:?} -> {}",
// myenum, en, myenum == en
// );
}
}
}
}
}
输出是:
matches!(Enum1, Enum1) = true
matches!(Enum1, Enum2) = true
matches!(Enum1, Enum3) = true
matches!(Enum2, Enum1) = true
matches!(Enum2, Enum2) = true
matches!(Enum2, Enum3) = true
matches!(Enum3, Enum1) = true
matches!(Enum3, Enum2) = true
matches!(Enum3, Enum3) = true
这不是我们想要的效果。
如果我只是使用数字或字符串,这会很好,但我觉得 Enum 的用处应该是没有关联的值,那为什么这么难做呢?
【问题讨论】: