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