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