使多个枚举变体具有相同值的最佳方法是什么?这是我想要的一个例子,除了Rust不喜欢它。
pub enum Nums {
Num1 = 0,
Num2 = 1,
Num3 = 2,
Num4 = 3,
Num5 = 4,
FirstNum = 0,
MiddleNum = 2,
LastNum = 4,
}
答案 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);
}