我可以做这个:
enum MyEnum {
A(i32),
B(i32),
}
但不是这个:
enum MyEnum {
A(123), // 123 is a constant
B(456), // 456 is a constant
}
我可以创建结构A
and B
使用单个字段,然后实现该字段,但我认为可能有一种更简单的方法。有没有?
回答这个问题的最好方法是弄清楚为什么你想要枚举中的常量:你是否将一个值与每个变体相关联,或者你希望每个变体be该值(例如enum
在 C 或 C++ 中)?
对于第一种情况,只保留没有数据的枚举变量并创建一个函数可能更有意义:
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,
}
这可以是matched
以所有相同的方式打开,但也可以转换为整数MyEnum::A as i32
。 (请注意,像这样的计算MyEnum::A | MyEnum::B
在 Rust 中并不自动合法:枚举具有特定值,它们不是位标志。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)