我希望能够传递参数以匹配枚举的哪个部分,就像这样:
enum D {
A(i64),
B(u64),
C(u64, u64),
}
let a = D.A(10);
println!(a.is_of(D.A)); // true
println!(a.is_of(D.B)); // false
我知道我可以使用匹配规则来实现这一点,但是为了我的目的,我希望这个 is_of
方法可以将枚举选项作为输入。
无法实现。
如果可以使用宏而不是函数,可以参见
另请参阅:
枚举变体的判别式可以用于比较
use std::mem::{discriminant,Discriminant};
enum MyEnum {
A,
B,
}
fn is_enum_variant(value: &MyEnum, d: Discriminant<MyEnum>) -> bool {
discriminant(value) == d
}
fn main() {
println!("Is variant: {}", is_enum_variant(&MyEnum::A, discriminant(&MyEnum::A)));
println!("Is variant: {}", is_enum_variant(&MyEnum::A, discriminant(&MyEnum::B)));
}
{{link1:Rust 游乐场}}
matches!()
宏可以进行此类模式匹配操作。 - mcarton