ループ内での借用
CoddyのRustジャーニー「基礎」セクションの一部。レッスン 67/75。
Rustでは、すべての値にownerがあり、ループで値を使うとき、Rustはその値をborrowしたいのか(ただ一時的に見るだけなのか)、それともownershipをtakeしたいのか(消費したいのか)を知る必要があります。
これは、loop が data の ownership を取得すると、その loop が終了した after には、その data をもう使用できなくなるためです。 この違いを理解することが、Rust で loop を正しく書くための鍵です。
たとえば、次のデータを考えてみましょう:
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);Method 2: Taking data(&なし):
for number in numbers {
sum += number;
}
// println!("Can't use {:?} anymore!", numbers);
// これはエラーを引き起こします次のように考えてみましょう:
&を使うことは、写真アルバムを見るようなものです。すべての写真を見ることができますが、アルバムはそのまま残ります&を使わないことは、写真を取り出すようなものです。写真は使えますが、その後アルバムは空になります
では、このスタイルです:
for num in numbers.iter() {}これは次のようなものです:
for num in &numbers {}そして、ミューテーション loop:
for num in numbers.iter_mut() {
*num *= 2;
}Can は次のようにも書けます:
for num in &mut numbers {
*num *= 2;
}自分で試してみよう
このレッスンにはコードチャレンジは含まれていません。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
自分で練習してみよう: Rustオンラインコンパイラ