具有内部元组和特定值的 Rust 枚举

rust enum with internal tuple and specific values

有什么方法可以为不同的枚举变体和内部元组指定特定的值 持有额外的变量? 我想要的是这样的:

#[repr(u8)]
enum Test {
a(String) = 0x01,
b(u32, u32) = 0x32,
c([u8;3]) = 0x44,
...
}

这两个都有效:

#[repr(u8)]
enum Test {
a(String),
b(u32, u32),
c([u8;3]),
...
}
#[repr(u8)]
enum Test1 {
a = 0x01,
b = 0x32,
c = 0x44,
...
}

如果没有,那么实现类似目标的最佳方法是什么?

谢谢!

您可以使用 enum-map,或者您可以这样做:

impl Test {
    #[inline]
    fn get_val(&self) -> u8 {
        match self {
            Self::a(_) => 0x01,
            Self::b(_, _) => 0x32,
            Self::c(_) => 0x44,
        }
    }
}

您正在寻找的功能已经实现,并且称为 arbitrary_enum_discriminant, but not yet 在稳定版本中发布。

你可以等到 Rust 1.56.0 发布,也就是 expected to be October 21st 2021,或者使用不稳定的编译器 nightly build。