如果我想知道一个枚举变量的判别式,我所要做的就是my_variant as usize
(或任何{integer}
类型)。如果我有判别式,并且想要获得相应的变体怎么办?
我显然尝试过反向my_int as MyEnum
,但是(毫无疑问)它没有用。
enum Enu {
X,
Y,
}
fn main() {
let discr_x = Enu::X as usize;
let x = magic(discr_x);
}
x
应该是Enu::X
答案 0 :(得分:0)
在Rust中,没有一个简洁的内置方法可以做到这一点。有一些板条箱可以帮助解决此类问题,例如enum_primitive,但根据您拥有的枚举数,您可能最好自己实施。
我已经做了几次这样的事情:
#[repr(u8)]
pub enum Mode {
Text,
Code,
Digits,
AlphaNumeric,
}
impl Mode {
pub fn from(mode: u8) -> Mode {
match mode {
0 => Mode::Text,
1 => Mode::Code,
2 => Mode::Digits,
3 => Mode::AlphaNumeric,
_ => Mode::Text,
}
}
}
编辑:
This thread包含一些其他上下文,说明默认情况下为什么无法实现此目的。