Замыкания в Rust, так же называемые лямбда, это функции, которые замыкают своё окружение. Для примера, замыкание, которое захватывает значение переменной x:
|val| val + x
Синтаксис и возможности замыканий делают их очень удобными для использования "на лету". Использование замыканий похоже на использование функций. Однако, тип входных и возвращаемых значений может быть выведен, а название аргумента должно быть указано.
Другие характеристики замыканий включают в себя:
• использование || вместо () для аргументов.
• опциональное ограничения тела функции ({}) для одного выражения (в противном случае обязательно).
• возможность захвата переменных за пределами окружения
fn main() {
// Инкремент с помощью замыкания и функции.
fn function (i: i32) -> i32 { i + 1 }
// Замыкания анонимны. Тут мы связываем их с ссылками
// Аннотация идентичны аннотации типов функции, но является опциональной
// как и оборачивания тела в `{}`. Эти безымянные функции
// назначены соответствующе названным переменным.
let closure_annotated = |i: i32| -> i32 { i + 1 };
let closure_inferred = |i | i + 1 ;
let i = 1;
// Вызов функции и замыкания.
println!("функция: {}", function(i));
println!("замыкание с указанием типа: {}", closure_annotated(i));
println!("замыкание с выводом типа: {}", closure_inferred(i));
// Замыкание не принимает аргументов, но возвращает `i32`.
// Тип возвращаемого значения выведен автоматически.
let one = || 1;
println!("замыкание, возвращающее один: {}", one());
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX