Option的迭代

描述

Option可以被看作是一个包含零或一个元素的容器。 特别是,它实现了IntoIteratortrait,因此可以用于需要这种类型的通用代码。

例子

由于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总是Some,那么在元素上使用std::iter::once更常见。

另外,由于Option实现了IntoIterator,所以可以使用for循环对其进行迭代。 这相当于用if let Some(..)来匹配它,在大多数情况下,你应该选择后者。

参见

Latest commit 9834f57 on 25 Aug 2021