Ответ 1
Анонимные функции, такие как function() {}
в JavaScript, существуют в Rust, и вы можете определить их с помощью синтаксиса закрытия
|arg, arg2, arg3| {
/* function body including optionally closed-over variables */
}
Обратите внимание, что выводятся аргументы и возвращаемые типы!
Независимо от того, являются ли они первоклассными или нет, требуется немного больше исследований.
По умолчанию закрытые переменные будут заимствованы функцией. Вы можете указать, что эти значения будут перемещены в функцию с помощью закрытия move
:
let num = 5;
let plus_num = move |x: i32| x + num;
Важно отметить, что замыкания, которые не ссылаются на их среду, которая включает замыкания move
, не требуют ссылок на созданный ими стек стека. Поскольку их размеры неизвестны, они не являются объектами первого класса сами по себе.
Вы можете Box
закрыть и вернуть его как объект-признак Fn
trait.
Этот ответ содержит краткое описание того, что в книга, в которой объясняется, как закрываются блокировки и как они взаимодействуют с окружающей средой.