我不知道为什么我不能访问向量上的任何字段...该向量是my Diner变量的可选属性(现在已存在):

struct Dinner {
    name: String,
    dishes: Option<Vec<Dishes>>
}

let mut dinner = Dinner::new();
dinner.dishes = Option::from(dinner.get_dishes());

for dish in dinner.dishes {
    dish.temperature = Some("HOT");
}

println!("{:#?}", script);
error[E0609]: no field `temperature` on type `Vec<Dishes>`
  --> src/main.rs:14:21
   |
14 |                      dish.temperature = Some("HOT");
   |                           ^^^^^^^^^^^ unknown field

更新:

我刚发现在洗碗的时候

for dish in dinner.dishes {
    println!("{:#?}", dish)
}

只有一个入口,里面有我所有的菜...这是一个Some(all my dishes are in here),我需要访问该Some的内容,我基本上需要go 掉围绕我需要访问的数据的Some()个.

推荐答案

(注意:我在这里把你的 struct 称为Dish,而不是Dishes,因为后者使这篇文章在语法上很难解析)

Option<Vec<Dish>>等于not等于Vec<Dish>.即使是Option<Vec<Dish>>has a value也不是Vec<Dish>.这里没有子类型关系.Option<Vec<Dish>>可以被认为是零或一个盘子的container.同样,Dish的数组本身并不是Dish.即使数组碰巧只包含一个Dish,也不能准确地说数组本身就是Dish.

for dish in dinner.dishes {
  ...
}

这是not在向量上迭代.这是在Option上迭代,Option是最多包含一个向量的容器.所以dish的类型是Vec<Dish>,它没有temperature.如果您知道可选值是非空的,那么可以使用Option::unwrap获得内部值

for dish in dinner.dishes.unwrap() {
  ...
}

如果你的断言被证明是错误的,这会引起panic .但更正确的解决方案是建立向量并将其分配给场,作为最后一步.

// Type annotations included for didactic purposes;
// they are not necessary in production code.
let mut dinner: Dinner = Dinner::new();
let mut dishes: Vec<Dish> = Vec::new();

for dish in dishes {
    dish.temperature = Some("HOT");
}

dinner.dishes = Some(dishes);

Rust相关问答推荐

移植带有可变borrow 的C代码-卸载期间错误(nappgui示例)

在Rust中创建可变片段的可变片段的最有效方法是什么?

如何在rust中有条件地分配变量?

为什么复印是豆荚的一个重要特征?

铁 rust 干线无法使用PowerShell获取环境变量

在自身功能上实现类似移动的行为,以允许通过大小的所有者进行呼叫(&;mut;self)?

为什么Rust函数的移植速度比C++慢2倍?

为什么允许我们将可变引用转换为不可变引用?

如何用Axum/Tower压缩Html内容?

是否可以在不切换到下一个位置的情况下获得迭代器值:

循环访问枚举中的不同集合

仅在使用 &mut 或线程时borrow 的数据在闭包之外转义?

存储返回 impl Trait 作为特征对象的函数

如何在 Rust 中显式声明 std::str::Matches<'a, P> ?

max(ctz(x), ctz(y)) 有更快的算法吗?

如何在 Rust 的 Hyper 异步闭包中从外部范围正确读取字符串值

为什么传递 option.as_ref 的行为不同于使用匹配块并将内部映射到 ref 自己?

使用部分键从 Hashmap 中检索值

如何为返回正确类型的枚举实现 get 方法?

返回 &str 但不是 String 时,borrow 时间比预期长