Option<Vec<>>
。#[derive(Debug)]
pub struct Person {
pub name: Option<String>,
pub age: Option<u64>,
}
#[derive(Debug)]
pub struct Foo {
pub people: Option<Vec<Person>>,
}
我一开始天真地使用了
for i in foo.people.iter() {
println!("{:?}", i);
}
我并不是遍历整个Vec
的所有元素,而是显示整个Vec
。这就像我在遍历Option
的唯一引用。
使用以下代码,我正在遍历Vec
的内容:
for i in foo.people.iter() {
for j in i.iter() {
println!("{:?}", j);
}
}
我不确定这是最愉快的语法,我认为你应该先取消Option
,以便实际迭代集合。
然后我不知道你在哪里可以使用Option::iter
,如果你总是有一个单一的引用。
这里是游乐场的链接。
Option::iter
旨在处理您希望将选项视为零或一个元素容器的情况。我也觉得它似乎没有什么用,但这就是设计初衷。 - user4815162342let foo: Vec<Option<T>> = vec![]; let bar: Vec<T> = foo.into_iter().flat_map(|x| x).collect();
. - Shepmaster