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()で実際に値を取り出そうとするまでクロージャを実行しません。イテレータを作成するだけでは何も処理は行われず、消費して初めて処理が走ります。