我该怎么做呢?
enum A {
A1(B)
}
enum B {
B1 {
num: u64,
}
}
fn main() {
let a = A::A1(B::B1 { num: 123 });
match a {
A::A1(b @ B::B1 { .. }) => {
println!("{}", b.num); // <-- no field `num` on type `B`
}
}
}
也就是说,我们的目标是将内部的B::B1
变量绑定到一个变量,然后访问该匹配的字段,但是这个变量消失了,绑定的b
变量又变成了一个无意义的泛型枚举。
我知道如果我手动地解构所有的B::B1
的内部字段,我可以访问它们,但是这有点不方便。有没有一种方法可以以某种方式“记住”内部枚举变体?
1条答案
按热度按时间wa7juj8i1#
问题是
B::B1
不是一个类型,而是一个值。b
本身的类型为B
,并且B
没有.num
成员。要从枚举中获取值,必须直接对其进行解构,如下所示:
这里的用例并不少见,通常通过嵌套结构来解决,如
serde_json::Value
中所示:一个二个一个一个