Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗rsSpFtFo 122 of 288 menu
◀ ▶

Один вызов замыкания в Rust

Если замыкание отдает захваченную строку наружу, второй вызов уже невозможен: значение ушло вместе с первым результатом. Для такого случая параметр ограничивают трейтом одного обращения.

Заберем строку из замыкания через функцию с таким параметром:

fn take_once(f: impl FnOnce() -> String) -> String { f() } fn main() { let name = String::from("ann"); let pack = move || name; let text = take_once(pack); println!("{}", text); }

Замыкание pack забирает name во владение и отдает его строкой. После работы take_once повторно передать то же замыкание нельзя: трейт одного вызова не допускает второго обращения.

Тот же прием годится, когда результат нужно вернуть вызывающему коду, а не только напечатать:

fn label_once(f: impl FnOnce() -> String) -> String { f() } fn main() { let city = String::from("oslo"); let make = move || city; let line = label_once(make); let ready = format!("city {}", line); println!("{}", ready); }

Дана строка:

let word = String::from("go");

Запишите замыкание без аргументов, которое отдает word, передайте его в функцию из урока и выведите полученный текст.

Дана строка:

let tag = String::from("rust");

Сделайте замыкание, которое возвращает tag, один раз передайте его в общую функцию и скажите, можно ли обратиться к тому же замыканию еще раз.

Скажите, почему после первого обращения к замыканию со строкой внутри повторная передача в функцию не собирается.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить