【问题标题】:Compare enum variants without specifying what's inside [duplicate]比较枚举变体而不指定里面的内容[重复]
【发布时间】:2015-03-25 06:37:04
【问题描述】:

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

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::Onefn(u16) -> Test {Two}。我可以使用这个事实吗?测试 x 是使用该函数创建的。

【问题讨论】:

    标签: enums rust


    【解决方案1】:

    (目前)不支持此功能。有活动的RFC 639 建议实现一个函数,该函数返回一个对应于枚举判别式的整数。使用该假设函数,您可以预期以下工作:

    assert_eq!(Test::Two(10).discriminant(), Test::Two(42).discriminant());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-18
      • 2011-10-16
      • 1970-01-01
      • 2014-09-16
      • 2012-05-04
      • 1970-01-01
      • 2021-10-24
      相关资源
      最近更新 更多