Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Option のイテレーション

説明

Option は、0 個または 1 個の要素を含むコンテナーとみなすことができます。 特に、IntoIterator トレイトを実装しているため、そのような型を必要とするジェネリックコードで使用できます。

OptionIntoIterator を実装しているため、 .extend() の引数として使用できます。

#![allow(unused)]
fn main() {
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() に渡すことができます。

#![allow(unused)]
fn main() {
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 を使用するほうが より慣用的であることに注意してください。

また、OptionIntoIterator を実装しているため、for ループを使ってイテレーションすることも可能です。 これは if let Some(..) でマッチさせるのと同等であり、ほとんどの場合は後者を優先すべきです。

関連項目

  • std::iter::once は、ちょうど 1 つの要素を生成する イテレーターです。これは Some(foo).into_iter() よりも読みやすい代替手段です。

  • Iterator::filter_map は、 Iterator::map の一種であり、 Option を返すマッピング関数に特化したものです。

  • ref_slice クレートは、 Option を 0 個または 1 個の要素を持つスライスに変換する関数を提供します。

  • Option<T> のドキュメント