有没有办法做这样的事情?
enum MyType {
Left,
Right,
#[cfg(universe = "normal")]
Port = Left,
#[cfg(universe = "normal")]
Starboard = Right,
#[cfg(universe = "mirror")]
Port = Right,
#[cfg(universe = "mirror")]
Starboard = Left,
}
Run Code Online (Sandbox Code Playgroud)
如果你真的尝试它,你会得到这个错误(我不得不添加MyType::
):
enum MyType {
Left,
Right,
#[cfg(universe = "normal")]
Port = Left,
#[cfg(universe = "normal")]
Starboard = Right,
#[cfg(universe = "mirror")]
Port = Right,
#[cfg(universe = "mirror")]
Starboard = Left,
}
Run Code Online (Sandbox Code Playgroud)
这是触发该错误的地方。
您可以使用关联的常量来获得一个看起来非常类似于枚举变体的常量:
#[derive(PartialEq, Eq)]
pub enum X {
A,
B,
}
impl X {
pub const A1: X = X::A;
}
Run Code Online (Sandbox Code Playgroud)
关联的常量在枚举内被命名空间,就像普通的变体一样。它与模式匹配兼容——即使是无法访问的警告和详尽的匹配规则也能工作。
match x {
X::A1 => ...,
X::B => ...,
}
Run Code Online (Sandbox Code Playgroud)
有一些限制:最重要的是,您不能拥有与该值相关联的任何数据。你还需要#[derive(PartialEq, Eq)]
在你的结构上。