Перенос значения в замыкание в Rust
Слово move перед вертикальными чертами
забирает использованные значения из окружения
внутрь замыкания. После такой записи владение
переходит к короткой функции, и старое имя
снаружи больше не доступно.
Перенесем текст в замыкание без параметров и выведем длину уже изнутри:
let name = String::from("ann");
let size = move || name.len();
println!("{}", size());
Строка name после записи с move
не читается снаружи: значение живет только
внутри size. Для числа перенос копирует
бits, потому что тип копируется по умолчанию:
let seed = 7;
let pick = move || seed + 1;
println!("{}", pick());
println!("{}", seed);
Дана переменная:
let city = String::from("oslo");
Запишите show_city с move,
которое возвращает длину city, вызовите
его и выведите число.
Даны переменные:
let tag = String::from("v1");
Объявите take_tag с move,
которое возвращает сам текст, выведите
результат и скажите, можно ли после этого
снова прочитать tag снаружи.
Дан следующий код:
let note = String::from("hi");
let echo = move || note;
let text = echo();
Скажите, соберется ли чтение note
сразу после вызова echo.