Замыкания в Rust

Замыкания (closures) в Rust -- это анонимные функции, которые способны запоминать свое окружение. Если говорить по сути, то практически любая анонимная функция способна запоминать свое окружение, следовательно, она является замыканием. Давайте рассмотрим замыкания на примерах.

Итак, когда замыкание получает значение непосредственно из своего окружения, это значение сохраняется в памяти в целях дальнейшего использования в теле замыкания. Вот простой пример:

В нашем примере переменная message, по сути, представляет часть лексического окружения, доступного замыканию.

Далее происходит определение замыкания hello, которое имеет возможность обращаться к данному окружению:

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

По итогу на консоль выведется строка "Hello Rust".

Если же замыкание должно менять значение внешней переменной, то и данная внешняя переменная, а также переменная-замыкание, должны быть определены с ключевым словом mut:

В нашем примере замыкание increase() увеличивает значение переменной n. Таким образом, переменная n, как и переменная increase, определены в качестве изменяемых.

Осталось посмотреть консольный вывод:

По материалам https://metanit.com/rust/tutorial/.