Menu
CoddyTech

ループ内での借用

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);
// これはエラーの原因になります

次のように考えてみましょう:

  1. &を使うのは、写真アルバムを見るようなものです。すべての写真を見ることができますが、アルバムはそのまま残ります
  2. &を使わないのは、写真を取り出すようなものです。写真を使えますが、その後アルバムは空になります

では、このスタイルを見てみましょう。

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;
}

自分で試してみよう

このレッスンにはコードチャレンジは含まれていません。

quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン

自分で練習してみよう: Rustオンラインコンパイラ