Namara

毎日コード。手助けなし。

2026-08-20

iterator.rs

fn main() {
    let v = vec![1, 2, 3];
    let mut iter = v.iter().map(|x| {
        println!("mapping {}", x);
        x * 2
    });

    println!("created");
    let first = iter.next();
    println!("{:?}", first);
}

各行はどの順序で出力されるでしょうか?

答え

created、続いてmapping 1、そしてSome(2)の順です。Rustのイテレータは遅延評価されるため、.map().next()で実際に値を取り出そうとするまでクロージャを実行しません。イテレータを作成するだけでは何も処理は行われず、消費して初めて処理が走ります。