rustの公式ドキュメントであるThe Rust Programming Language 日本語版を読み進めていると、第10章のジェネリックなデータ型の章で、以下のコードが記載されていました。
fn largest_i32(list: &[i32]) -> i32 { let mut largest = list[0]; for &item in list.iter() { if item > largest { largest = item; } } largest }
処理内容はシンプルで引数に与えられたスライスから最大値を線形探索して返すというものです。
しかし、for &item in iter()
と書くのはなぜでしょうか。for item in iter()
ではダメなのでしょうか。
結論としては参照外しと呼ばれる機能を上手く使うために、for &item in iter()
としていました。参照外しが行われることで&item
は参照が消えて&i32
ではなくi32
型となるのです。