Замыкания
Замыкания в 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()); }