Синтаксис замыканий
Замыкания создаются с помощью вертикальных черт: |..| ...
// Copyright 2025 Google LLC
// SPDX-License-Identifier: Apache-2.0
fn main() {
// Тип аргумента и возвращаемый тип могут быть выведены в облегчённом синтаксисе:
let double_it = |n| n * 2;
dbg!(double_it(50));
// Или можно явно указать типы и заключить тело в фигурные скобки:
let add_1f32 = |x: f32| -> f32 { x + 1.0 };
dbg!(add_1f32(50.));
}
-
Аргументы помещаются между
|..|. Тело можно заключить в{ .. }, но если это одно выражение, скобки можно опустить. -
Типы аргументов необязательны и выводятся, если не указаны. Возвращаемый тип тоже необязателен, но его можно записать, только если тело заключено в
{ .. }. -
Оба примера можно записать и как обычные вложенные функции: они не захватывают никаких переменных из своего лексического окружения. Захваты мы рассмотрим дальше.
Для дальнейшего изучения
-
Возможность хранить функции в переменных относится не только к замыканиям: обычные функции тоже можно поместить в переменные и вызывать так же, как замыкания: пример на playground.
- Указанный пример также показывает, что замыкания, которые ничего не захватывают, могут приводиться к обычному указателю на функцию.