問題一覧に戻る
初級所有権
問題39: 所有権とループ

forループでコレクションを扱う際、所有権の扱い方により3つのパターンがあります。&でイテレートすると借用、&mutで可変借用、何もつけないと所有権が移動します。借用なら元のデータは使用可能ですが、所有権が移動すると元の変数は使えなくなります。この仕組みにより、安全で効率的なループ処理が実現されます。

fn main() {
let names = vec!["Alice", "Bob", "Charlie"];

// 借用イテレータ
for name in & {
println!("Hello, {}", name);
}
println!("Names still available: {:?}", names);

let mut numbers = vec![1, 2, 3, 4, 5];
// 可変借用イテレータ
for num in & numbers {
*num *= 2;
}
println!("Doubled: {:?}", numbers);

let values = vec![10, 20, 30];
// 消費イテレータ
for val in {
println!("Consuming: {}", val);
}
// valuesは使えない
// println!("{:?}", values);
}