Замыкания

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

Загрузка...