RUST_CODE Telegram 977
🦀 Rust-задача: неожиданный вывод из-за владения и `for`


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` не перемещается, и всё работает корректно.
👍438🔥4🥰1😁1



tgoop.com/rust_code/977
Create:
Last Update:

🦀 Rust-задача: неожиданный вывод из-за владения и `for`


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` не перемещается, и всё работает корректно.

BY Rust


Share with your friend now:
tgoop.com/rust_code/977

View MORE
Open in Telegram


Telegram News

Date: |

For crypto enthusiasts, there was the “gm” app, a self-described “meme app” which only allowed users to greet each other with “gm,” or “good morning,” a common acronym thrown around on Crypto Twitter and Discord. But the gm app was shut down back in September after a hacker reportedly gained access to user data. The optimal dimension of the avatar on Telegram is 512px by 512px, and it’s recommended to use PNG format to deliver an unpixelated avatar. A Hong Kong protester with a petrol bomb. File photo: Dylan Hollingsworth/HKFP. The imprisonment came as Telegram said it was "surprised" by claims that privacy commissioner Ada Chung Lai-ling is seeking to block the messaging app due to doxxing content targeting police and politicians. It’s easy to create a Telegram channel via desktop app or mobile app (for Android and iOS):
from us


Telegram Rust
FROM American