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

Изменение захвата замыканием в Rust

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

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

fn apply(mut f: impl FnMut(i32) -> i32, n: i32) -> i32 { f(n) } fn main() { let mut total = 0; let mut add = |x| { total += x; total }; let after = apply(add, 4); println!("{}", after); }

Имя total захвачено изменяемо, поэтому замыкание add подходит под трейт с изменением. Параметр f помечен как mut, иначе тело функции не смогло бы обратиться к замыканию, которое меняет состояние.

Функцию можно вызвать снова с тем же замыканием, и счетчик продолжит расти:

fn apply(mut f: impl FnMut(i32) -> i32, n: i32) -> i32 { f(n) } fn main() { let mut total = 0; let mut add = |x| { total += x; total }; let first = apply(add, 2); let second = apply(add, 3); println!("{} {}", first, second); }

Дано число:

let mut count: i32 = 0;

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

Дано число:

let mut score: i32 = 5;

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

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

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