具有相同值的多个枚举变体?

时间:2016-06-25 05:31:28

标签: rust

使多个枚举变体具有相同值的最佳方法是什么?这是我想要的一个例子,除了Rust不喜欢它。

pub enum Nums {
    Num1            = 0,
    Num2            = 1,
    Num3            = 2,
    Num4            = 3,
    Num5            = 4,

    FirstNum        = 0,
    MiddleNum       = 2,
    LastNum         = 4,
}

2 个答案:

答案 0 :(得分:10)

enum个变体不能与其他变体具有相同的标记值。从Rust 1.20开始,您可以使用关联的常量。这允许您使用Nums::FIRST_NUM等。

pub enum Nums {
    Num1 = 0,
    Num2 = 1,
    Num3 = 2,
    Num4 = 3,
    Num5 = 4,
}

impl Nums {
    pub const FIRST_NUM: Nums = Nums::Num1;
    pub const MIDDLE_NUM: Nums = Nums::Num3;
    pub const LAST_NUM: Nums = Nums::Num5;
}

在此之前,您需要使用常量:

pub const FIRST_NUM: Nums = Nums::Num1;
pub const MIDDLE_NUM: Nums = Nums::Num3;
pub const LAST_NUM: Nums = Nums::Num5;

答案 1 :(得分:1)

您还可以向enum添加方法:

pub enum Nums {
    Num1 = 0,
    Num2 = 1,
    Num3 = 2,
    Num4 = 3,
    Num5 = 4,
}

impl Nums {
    pub fn first()  -> Self { Nums::Num1 }
    pub fn middle() -> Self { Nums::Num3 }
    pub fn last()   -> Self { Nums::Num5 }
}

fn main() {
    println!("{}", Nums::first() as u8);
}