比较枚举变体而不指定其中的内容

vbe*_*nar 4 enums rust

我有一个包含一些嵌套值的枚举.我想检查这个enum是给定的变体但是没有指定里面的内容.检查以下程序:

enum Test {
    Zero,
    One(u8),
    Two(u16),
    Four(u32),
}

fn check(x: Test, y: Test) -> bool {
    x == y;
}

fn main() {
    let x = Test::Two(10);
    let b1 = check(x, Test::One);
    let b2 = check(x, Test::Two);
    let b3 = match x {
        Test::Four(_) => true,
        _ => false,
    }   
}
Run Code Online (Sandbox Code Playgroud)

b3检查内部x是否Test::Four具有任意值.我希望在函数中完成检查check.当前代码无法编译,我无法弄清楚如何在没有相应的内部值的情况下仅提取枚举变量.

我想这可以用宏转换到match表达式,但是没有宏可以做到吗?

我可以看到Test::Onefn(u16) -> Test {Two}.我能用这个事实吗?测试x是使用该函数创建的.

oli*_*obk 6

(尚未)支持此功能.存在活动的RFC 639,其建议实现返回对应于枚举判别式的整数的函数.使用该假设功能,您可以期望以下工作:

assert_eq!(Test::Two(10).discriminant(), Test::Two(42).discriminant());
Run Code Online (Sandbox Code Playgroud)