如何访问结构中的结构字段?

时间:2015-07-30 22:26:45

标签: rust

我有一个Child ren的结构容器和一个方法pop(),它删除最后添加的Child并返回它的a值:

struct Child {
    a: i32,
    b: String,
}

struct Container<'a> {
    vector: &'a mut Vec<Child>,
}

impl<'a> Container<'a> {
    fn pop(&mut self) -> i32 {
        return self.vector.pop().a;
    }
}

我在编译期间收到错误:

error: no field `a` on type `std::option::Option<Child>`
  --> src/main.rs:12:34
   |
12 |         return self.vector.pop().a;
   |                                  ^

Container的{​​{1}}范围是否不允许访问其pop() ren范围的值?

1 个答案:

答案 0 :(得分:6)

Vec::pop会返回Option<Child>,而非Child。这允许它有一些合理的返回,以防Vec中没有要弹出的元素。要获得可能位于a内的Option<Child>,您可以使用Childunwrap()转换为Vec,但这会导致您的计划panic fn pop(&mut self) -> i32 { return self.vector.pop().unwrap().a; } 是空的。代码看起来像这样:

Vec

另一种选择是更密切地复制None的行为,并在没有元素的情况下返回Option。你可以使用fn pop(&mut self) -> Option<i32> { return self.vector.pop().map(|child| child.a) } 的{​​{3}}:

来做到这一点
jspm install semantic-ui=github:Semantic-Org/Semantic-UI