我可以做到:
enum MyEnum {
A(i32),
B(i32),
}
但不是这个:
enum MyEnum {
A(123), // 123 is a constant
B(456), // 456 is a constant
}
我可以用一个字段创建A
和B
的 struct ,然后实现该字段,但我认为可能有更简单的方法.有吗?
我可以做到:
enum MyEnum {
A(i32),
B(i32),
}
但不是这个:
enum MyEnum {
A(123), // 123 is a constant
B(456), // 456 is a constant
}
我可以用一个字段创建A
和B
的 struct ,然后实现该字段,但我认为可能有更简单的方法.有吗?
解决这个问题的最佳方法是找出为什么要在枚举中添加常量:是否将值与每个变量关联起来,或者您希望每个变量都达到be值(比如C或C++中的enum
)?
对于第一种情况,让enum变量不包含任何数据,并创建一个函数可能更有意义:
enum MyEnum {
A,
B,
}
impl MyEnum {
fn value(&self) -> i32 {
match *self {
MyEnum::A => 123,
MyEnum::B => 456,
}
}
}
// call like some_myenum_value.value()
这种方法可以多次应用,将许多独立的信息与每个变量关联起来,例如,也许你也想要一个.name() -> &'static str
方法.将来,这些函数甚至可以标记为const
个函数.
对于第二种情况,可以指定显式整数标记值,就像C/C++:
enum MyEnum {
A = 123,
B = 456,
}
这可以以相同的方式设置为match
,但也可以转换为整数MyEnum::A as i32
.(请注意,像MyEnum::A | MyEnum::B
这样的计算在Rust中并不自动合法:枚举有特定的值,它们不是位标志.)