关于 Option的迭代器

说明

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

示例

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

  1. let turing = Some("Turing");
  2. let mut logicians = vec!["Curry", "Kleene", "Markov"];
  3. logicians.extend(turing);
  4. // equivalent to
  5. if let Some(turing_inner) = turing {
  6. logicians.push(turing_inner);
  7. }

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

  1. let turing = Some("Turing");
  2. let logicians = vec!["Curry", "Kleene", "Markov"];
  3. for logician in logicians.iter().chain(turing.iter()) {
  4. println!("{} is a logician", logician);
  5. }

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

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

参阅