我有一个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范围的值?
答案 0 :(得分:6)
Vec::pop
会返回Option<Child>
,而非Child
。这允许它有一些合理的返回,以防Vec
中没有要弹出的元素。要获得可能位于a
内的Option<Child>
,您可以使用Child
从unwrap()
转换为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