Menu
Coddy logo textTech

Заимствование в цикле

Часть раздела Основы путешествия по Rust на Coddy. Урок 67 из 75.

В Rust у каждого значения есть владелец, и когда ты используешь значение в loop, Rust должен знать, хочешь ли ты заимствовать его (просто временно посмотреть на него) или получить ownership этого значения (поглотить его).

Это важно, потому что если loop забирает ownership ваших data, вы больше не можете использовать эти data after завершения loop. Понимание этого различия — ключ к правильному написанию loop в 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: Taking the data (без &):

for number in numbers {
    sum += number;
}
// println!("Can't use {:?} anymore!", numbers);
// Это вызвало бы ошибку

Представь это так:

  1. Использование & подобно просмотру фотоальбома: ты можешь увидеть все фотографии, но альбом остаётся целым
  2. Неиспользование & подобно тому, как ты достаёшь фотографии: ты можешь воспользоваться ими, но после этого альбом будет пуст

А теперь такой стиль:

for num in numbers.iter() {}

Похоже на это:

for num in &numbers {}

И цикл мутации:

for num in numbers.iter_mut() { 
    *num *= 2;
}

Также можно записать следующим образом:

for num in &mut numbers { 
    *num *= 2;
}

Попробуйте сами

В этом уроке нет задания по программированию.

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы

Потренируйтесь самостоятельно: Онлайн-компилятор Rust