fn main() {
let data = vec!["rust", "go", "zig"];
for item in data {
println!("{item}");
}
println!("{:?}", data);
}
❓ Что произойдёт при компиляции и запуске?
• a) Выведет
rust, go, zig, затем ["rust", "go", "zig"] • b) Ошибка компиляции:
data уже перемещён • c) Всё выведет корректно, потому что
&str копируются • d) Программа скомпилируется, но упадёт во время выполнения
💡 Разбор
for item in data в Rust перемещает `data`, потому что Vec<T> по умолчанию потребляется в IntoIterator. Это значит, что после цикла data больше не принадлежит функции main.Попытка использовать
data в println! после этого приведёт к ошибке компиляции: value borrowed after move.✅ **Правильный ответ: b) Ошибка компиляции: `data` уже перемещён**
🧠 **Вывод:** в Rust `for item in collection` по умолчанию вызывает `.into_iter()`, а не `.iter()`, и это **может забрать владение** коллекцией.
🔧 **Как избежать:**
Если нужно сохранить `data`, итерация должна быть по ссылке:
for item in &data {
println!("{item}");
}
println!("{:?}", data);
Теперь `data` не перемещается, и всё работает корректно.