关于 Option的迭代器

说明

Option可以被视为一个包含一个0个或者1个元素的容器。特别是它实现了IntoIterator特性,这样我们就可以用来写泛型代码。

示例

因为Option实现了IntoIterator特性,它就可以用来当.extend()的参数:

#![allow(unused)]
fn main() {
let turing = Some("Turing");
let mut logicians = vec!["Curry", "Kleene", "Markov"];

logicians.extend(turing);

// equivalent to
if let Some(turing_inner) = turing {
    logicians.push(turing_inner);
}
}

如果你需要将一个Option添加到已有的迭代器后面,你可以用 .chain():

#![allow(unused)]
fn main() {
let turing = Some("Turing");
let logicians = vec!["Curry", "Kleene", "Markov"];

for logician in logicians.iter().chain(turing.iter()) {
    println!("{} is a logician", logician);
}
}

注意如果这个Option总是非空的,那么用std::iter::once更加合适。

此外,因为Option实现了IntoIterator特性,它就可以用for循环来迭代。这等价于用if let Some(..),大多数情况下倾向于用后者。

参阅