假设我定义并实例化了一个枚举,如下所示:
enum MyEnum {
EmptyVariant,
TupleVariant(u8),
StructVariant {
key: u8,
value: char,
}
}
let instance = MyEnum::StructVariant{key: 8, value: 'a'};
Run Code Online (Sandbox Code Playgroud)
是否可以在不解构的情况下匹配此变体?例如,不要这样做:
if let MyEnum::StructVariant{key, value} = instance {
eprintln!("key, value = {}, {}", key, value);
}
Run Code Online (Sandbox Code Playgroud)
我宁愿写这样的东西:
if let MyEnum::StructVariant{VARIANT_MEMBERS} = instance {
eprintln!("key, value = {}, {}", VARIANT_MEMBERS.key, VARIANT_MEMBERS.value);
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,写出结构体变体的成员是良性的,但在变体具有许多成员的情况下,会使代码难以阅读。
我认为从今天起这是不可能的。
我确实看到了以下模式,实际上只需使用额外的中间类型即可实现您的要求:
相反,将 的所有所需成员放入StructVariant实际的结构类型中,并让您的枚举使用该结构作为 的唯一字段StructVariant。
struct MyVariant {
key: u8,
value: char
}
enum MyEnum {
EmptyVariant,
TupleVariant(u8),
StructVariant(MyVariant)
}
if let MyEnum::StructVariant(x) = instance {
eprintln!("key, value = {}, {}", x.key, x.value);
}
Run Code Online (Sandbox Code Playgroud)
当您想要将 around 的成员传递StructVariant给其他函数或类型时,这也很方便。
| 归档时间: |
|
| 查看次数: |
1343 次 |
| 最近记录: |