在这种情况下,如何访问c
类型struct
内的B_
类enum
内的字段A
?
enum A {
B(B_),
D(D_)
}
enum D_ { D_1, D_2 }
struct B_ {
c: Vec<i32>,
}
这样的明显的东西不起作用:
let y = A::B;
y.c = Vec::new();
答案 0 :(得分:1)
我认为第一个问题是你真正想要的是y
类型A
,因此它首先不能有一个名为c
的字段。 y
可以是A::B
或A::D
。仅当y
是A::B
变体时,您才能获得变体中的B_
对象,然后获取c
。
您的代码中的第二个问题是您没有将y
初始化为A::B
变体。表达式A::B
的类型为fn(B_) -> A {A::B}
,它是A
枚举的一种构造函数(由编译器自动生成)。
以下代码正确初始化y
并获取c
:
enum A {
B(B_),
D(D_)
}
enum D_ { D_1, D_2 }
struct B_ {
c: Vec<i32>,
}
fn main() {
let y = A::B( B_ { c : Vec::new() });
// Check if y is an A::B, so we can get the B_ object inside
// by deconstruction. Then we can get c.
if let A::B(b_) = y {
println!("{:?}", b_.c);
}
}
也许您认为A::B
是B
内部定义的A
类型,而不是枚举工作的方式是Rust。