Menu
Coddy logo textTech

ループ内での借用

CoddyのRustジャーニー「基礎」セクションの一部。レッスン 67/75。

Rustでは、すべての値にownerがあり、ループで値を使うとき、Rustはその値をborrowしたいのか(ただ一時的に見るだけなのか)、それともownershiptakeしたいのか(消費したいのか)を知る必要があります。

これは、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);
// これはエラーを引き起こします

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

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

では、このスタイルです:

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

自分で試してみよう

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

quiz icon腕試し

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

基礎のすべてのレッスン

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