Перенос данных в поток в Rust
В предыдущем разделе захват во владение
забирал имена внутрь замыкания. Фоновая
линия может жить дольше, чем локальные
имена в основной функции, поэтому строку
передают так же, через move.
Создадим строку в main, перенесем ее
в замыкание и выведем из фоновой линии:
use std::thread;
fn main() {
let city = String::from("oslo");
let handle = thread::spawn(move || {
println!("{}", city);
});
match handle.join() {
Ok(_) => println!("done"),
Err(_) => println!("failed"),
}
}
После move имя city в основной
линии больше недоступно: владение ушло
внутрь замыкания. На экране слово
oslo, затем done.
Без переноса ссылка на локальную строку не доживает до конца фоновой линии, и такой код не собирается:
use std::thread;
fn main() {
let city = String::from("oslo");
let handle = thread::spawn(|| {
println!("{}", city);
});
let _ = handle;
}
Дано число:
let num = 7;
Соберите строку с текстом "id"
и этим литералом, перенесите ее во
владение фоновой линии и выведите строку
после ожидания ручки.
Скажите, почему после move нельзя
читать исходное имя строки в main.
Дано число:
let num = 1;
Перенесите копируемое число с этим значением во владение замыкания, верните его увеличенным на единицу и выведите результат ожидания.