如何从判别式中创建一个Field-Less Enum变体?

时间:2019-05-03 15:10:09

标签: enums rust

如果我想知道一个枚举变量的判别式,我所要做的就是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

1 个答案:

答案 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包含一些其他上下文,说明默认情况下为什么无法实现此目的。