我可以做这个:
enum MyEnum {
A(i32),
B(i32),
}
但不是这个:
enum MyEnum {
A(123), // 123 is a constant
B(456), // 456 is a constant
}
我可以创建结构的A
和B
用单场,然后执行该领域,但我觉得可能是一个更简单的方法。有没有?
回答此问题的最佳方法是弄清楚为什么要在枚举中使用常量:是将一个值与每个变量关联,还是希望每个变量都是该值(例如enum
C或C ++中的)?
对于第一种情况,只保留没有数据的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中不是自动合法的:枚举具有特定的值,它们不是位标记。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句