Option や Result は IntoIterator を実装しているため、Iterator に変換できる。
Option のイテレータは 0 個か 1 個の要素を走査する。
つまり、None なら 0 個、Some なら 1 個となる。
以下では、Option を利用してコレクションに要素を選択的に追加している。
fn main() {
let mut nums = vec![];
nums.extend(filter(0));
nums.extend(filter(1));
nums.extend(filter(2));
assert_eq!(nums, vec![0, 2]);
}
fn filter(arg: i32) -> Option<i32> {
if arg % 2 == 0 { Some(arg) } else { None }
}