10-遍历 Option

遍历 Option — Rust Design Patterns

译文 · 基于 Rust Design Patterns

原文链接: https://rust-unofficial.github.io/patterns/idioms/option-iter.html

遍历 Option

描述

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

示例

由于 Option 实现了 IntoIterator,它可以作为 .extend() 的参数:

1
2
3
4
5
6
7
8
9
let turing = Some("Turing");
let mut logicians = vec!["Curry", "Kleene", "Markov"];

logicians.extend(turing);

// 等价于
if let Some(turing_inner) = turing {
    logicians.push(turing_inner);
}

如果需要把一个 Option 接到现有迭代器的末尾,可以把它传给 .chain():

1
2
3
4
5
6
let turing = Some("Turing");
let logicians = vec!["Curry", "Kleene", "Markov"];

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

注意:如果该 Option 总是 Some,那么更地道的做法是对该元素使用 std::iter::once,而不是用 Option。

另外,由于 Option 实现了 IntoIterator,也可以用 for 循环遍历它。这等价于用 if let Some(..) 匹配,而且在大多数情况下应优先使用后者。

参见

最后修改 August 21, 2026: 更新 (76fc81a2e)