Namaran

Code daily. Without assist.

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

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

Answer

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