ループ内での借用
CoddyのRustジャーニー「基礎」セクションの一部。レッスン 67/75。
Rustでは、すべての値に所有者があり、ループ内で値を使うとき、Rustはその値を借用する(一時的に見るだけ)のか、それとも所有権を取得する(消費する)のかを知る必要があります。
これは、ループがデータの所有権を持つと、ループの終了後にそのデータを使えなくなるため重要です。この違いを理解することが、Rustでループを正しく書く鍵です。
たとえば、次のデータを考えてみましょう。
let numbers = vec![1, 2, 3, 4, 5];
let mut sum = 0;方法1:データを見る(&を使う):
for number in &numbers {
sum += number;
}
println!("I can use it here: {:?}", numbers);方法 2: データを取り出す(&なし):
for number in numbers {
sum += number;
}
// println!("Can't use {:?} anymore!", numbers);
// これはエラーの原因になります次のように考えてみましょう:
&を使うのは、写真アルバムを見るようなものです。すべての写真を見ることができますが、アルバムはそのまま残ります&を使わないのは、写真を取り出すようなものです。写真を使えますが、その後アルバムは空になります
では、このスタイルを見てみましょう。
for num in numbers.iter() {}これは次のものに似ています:
for num in &numbers {}そして、ベクターをmutで宣言する必要がある変更ループです。
let mut numbers = vec![1, 2, 3, 4, 5];
for num in numbers.iter_mut() {
*num *= 2;
}このようにも書けます。
for num in &mut numbers {
*num *= 2;
}自分で試してみよう
このレッスンにはコードチャレンジは含まれていません。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
自分で練習してみよう: Rustオンラインコンパイラ