Menu
CoddyTech

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

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

И цикл с изменением, для которого вектор нужно объявить с помощью 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