Заимствование в цикле
Часть раздела Основы путешествия по 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);
// Это вызвало бы ошибкуПредставь себе это так:
- Использовать
&— всё равно что смотреть фотоальбом: ты видишь все фотографии, но альбом остаётся целым - Не использовать
&— всё равно что вынуть фотографии: ими можно пользоваться, но альбом после этого будет пустым
Теперь этот стиль:
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;
}Попробуйте сами
В этом уроке нет задания по программированию.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
4Операторы. Часть 1
Арифметические операторыОператор остатка от деленияАрифметические сокращенияОператоры сравненияСравнение строк7Основы ввода-вывода
Вывод в консольЧтение ввода пользователяПовторение — До 120Повторение — True или False5Операторы. Часть 2
Логические операторы. Часть 1Логические операторы. Часть 2Повторение — простая логикаЛогические операторы. Часть 38Приложение-калькулятор
Приветственное сообщениеПолучение чисел11Функции
Объявление функцийПараметры и аргументыВозвращаемые значенияМножественные возвращаемые значенияПовторение: функция SigmaПовторение: функция валидации14Итерация по массивам
Работа с диапазонамиУлучшенный цикл forЗаимствование в циклеОсновные операции с массивами3Переменные. Часть 2
Объявление типаСоглашения об именованииВывод типовПовторение: инициализация переменныхПриведение типов9Циклы
Цикл For по последовательностиЦикл WhileОператор BreakОператор ContinueВложенные циклыМетки цикловБесконечный циклПовторение — Динамический вводПотренируйтесь самостоятельно: Онлайн-компилятор Rust