我有一些包含一些嵌套值的枚举。我想检查这个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,
}
}
b3
检查x
是否为Test::Four
,其中包含任意值。我希望在函数check
中完成检查。当前代码无法编译,我无法弄清楚如何在没有相应内部值的情况下仅提取枚举变量。
我想这可以通过宏转换到match
表达式完成,但是没有宏可以做到吗?
我可以看到Test::One
是fn(u16) -> Test {Two}
。我能用这个事实吗?测试x是使用该函数创建的。
答案 0 :(得分:5)
(尚未支持)。存在活动RFC 639,其建议实现返回与枚举判别式对应的整数的函数。使用该假设功能,您可以期望以下工作:
assert_eq!(Test::Two(10).discriminant(), Test::Two(42).discriminant());