是否可以将枚举变体的所有结构成员绑定到单个变量?
Is it possible to bind all the struct members of an enum variant to a single variable?
假设我按如下方式定义和实例化一个枚举:
enum MyEnum {
EmptyVariant,
TupleVariant(u8),
StructVariant {
key: u8,
value: char,
}
}
let instance = MyEnum::StructVariant{key: 8, value: 'a'};
是否可以在不解构的情况下匹配这个变体?例如,而不是做:
if let MyEnum::StructVariant{key, value} = instance {
eprintln!("key, value = {}, {}", key, value);
}
我宁愿写这样的东西:
if let MyEnum::StructVariant{VARIANT_MEMBERS} = instance {
eprintln!("key, value = {}, {}", VARIANT_MEMBERS.key, VARIANT_MEMBERS.value);
}
在这个例子中,写出结构变体的成员是良性的,但在变体有很多成员的情况下,它会使代码难以阅读。
我认为到今天为止还不可能。
我确实看到了以下模式,实际上它只需要一个额外的中间类型就可以实现您的要求:
而是将 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);
}
当您想将 StructVariant
的成员传递给其他函数或类型时,这也很方便。
假设我按如下方式定义和实例化一个枚举:
enum MyEnum {
EmptyVariant,
TupleVariant(u8),
StructVariant {
key: u8,
value: char,
}
}
let instance = MyEnum::StructVariant{key: 8, value: 'a'};
是否可以在不解构的情况下匹配这个变体?例如,而不是做:
if let MyEnum::StructVariant{key, value} = instance {
eprintln!("key, value = {}, {}", key, value);
}
我宁愿写这样的东西:
if let MyEnum::StructVariant{VARIANT_MEMBERS} = instance {
eprintln!("key, value = {}, {}", VARIANT_MEMBERS.key, VARIANT_MEMBERS.value);
}
在这个例子中,写出结构变体的成员是良性的,但在变体有很多成员的情况下,它会使代码难以阅读。
我认为到今天为止还不可能。
我确实看到了以下模式,实际上它只需要一个额外的中间类型就可以实现您的要求:
而是将 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);
}
当您想将 StructVariant
的成员传递给其他函数或类型时,这也很方便。