如何将枚举变体传递为函数参数来进行匹配?

11

我希望能够传递参数以匹配枚举的哪个部分,就像这样:

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 方法可以将枚举选项作为输入。


4
这段代码的意思是:判断变量a是否匹配枚举类型D中A的某个变体。在Rust编程语言中,使用matches!()宏可以进行此类模式匹配操作。 - mcarton
2个回答

15

16
哎呀.. 我还是不明白为什么在 Rust 中枚举类型不能作为参数传递。这真的很不符合直觉。 - Matthew S

3

枚举变体的判别式可以用于比较

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)));
}

Rust Playground

{{link1:Rust 游乐场}}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接