Menu
Coddy logo textTech

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

Часть раздела Fundamentals путешествия по Rust на Coddy — урок 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 {}

И цикл с изменением:

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

Это также можно записать так:

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

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

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

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

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

Все уроки раздела Fundamentals