Заимствование в цикле
Часть раздела Основы путешествия по 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);
// Это вызвало бы ошибкуПредставь это так:
- Использование
&подобно просмотру фотоальбома: ты можешь увидеть все фотографии, но альбом остаётся целым - Неиспользование
&подобно тому, как ты достаёшь фотографии: ты можешь воспользоваться ими, но после этого альбом будет пуст
А теперь такой стиль:
for num in numbers.iter() {}Похоже на это:
for num in &numbers {}И цикл мутации:
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