gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:34:19 24 4
gpt4 key购买 nike

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

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;
| ^

Containerpop() 的范围是否不允许访问其 Children 范围的值?

最佳答案

Vec::pop返回 Option<Child> , 不是 Child .这允许它在 Vec 中没有元素的情况下有合理的返回值。弹出。到达a可能在里面,你可以从Option<Child>转换至 Child使用 unwrap() , 但这会导致你的程序 panic如果Vec是空的。其代码如下所示:

fn pop(&mut self) -> i32 {
return self.vector.pop().unwrap().a;
}

另一种选择是更紧密地复制 Vec的行为,并返回 None如果没有元素。您可以使用 Option 来做到这一点的 map method :

fn pop(&mut self) -> Option<i32> {
return self.vector.pop().map(|child| child.a)
}

关于rust - 如何访问结构中的结构字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31735125/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com