tl;博士
在
match
的语句
enum
对于子变量,如何将该子变量分配给变量?
考虑到这些
枚举
s
enum MySubVariant {
A,
B,
C,
}
enum MyEnum {
X { variant: MySubVariant },
Y { variant: MySubVariant },
Z,
}
fn main() {
let x = MyEnum::X { variant: MySubVariant::A };
match x {
MyEnum::X { variant: MySubVariant::A }
| MyEnum::X { variant: MySubVariant::B }
| MyEnum::Y { variant: MySubVariant::A }
| MyEnum::Y { variant: MySubVariant::B }
=> {
// do something unique for A or B
match x {
MyEnum::X { variant } => {
print!("the variant was ");
match variant {
MySubVariant::A => println!("A"),
MySubVariant::B => println!("B"),
_ => unreachable!(),
}
}
_ => unreachable!(),
}
}
MyEnum::X { variant: MySubVariant::C }
| MyEnum::Y { variant: MySubVariant::C }
=> {
// do something unique for C
print!("the variant was ");
match x {
MyEnum::X { variant } | MyEnum::Y { variant } => {
match variant {
MySubVariant::A => println!("A"),
MySubVariant::B => println!("B"),
MySubVariant::C => println!("C"),
}
}
_ => unreachable!(),
}
}
MyEnum::Z => println!("Z"),
}
}
我想访问
variant
match语句中的子变量。
我想更换内部
火柴
带有变量的语句。
以下是我想要的人为(无效)代码:
fn main() {
let x = MyEnum::X { variant: MySubVariant::A };
match x {
MyEnum::X { variant: MySubVariant::A } where v = variant
| MyEnum::X { variant: MySubVariant::B } where v = variant
| MyEnum::Y { variant: MySubVariant::A } where v = variant
| MyEnum::Y { variant: MySubVariant::B } where v = variant
=> {
// do something unique for A or B
println!("the variant was {:?}", v);
}
MyEnum::X { variant: MySubVariant::C } where v = variant
| MyEnum::Y { variant: MySubVariant::C } where v = variant
=> {
// do something unique for C
println!("the variant was {:?}", v);
}
MyEnum::Z => println!("Z"),
}
}
注意内部
火柴
语句替换了变量
v
用人工编码
where v = variant
.
我如何简化这些
火柴
语句,以便轻松访问
变种
亚变体?