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 }
}