访问枚举

时间:2016-01-17 12:53:50

标签: struct enums rust

在这种情况下,如何访问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();

1 个答案:

答案 0 :(得分:1)

我认为第一个问题是你真正想要的是y类型A,因此它首先不能有一个名为c的字段。 y可以是A::BA::D。仅当yA::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::BB内部定义的A类型,而不是枚举工作的方式是Rust。