Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Синтаксис замыканий

Замыкания создаются с помощью вертикальных черт: |..| ...

// 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.));
}
This slide should take about 3 minutes.
  • Аргументы помещаются между |..|. Тело можно заключить в { .. }, но если это одно выражение, скобки можно опустить.

  • Типы аргументов необязательны и выводятся, если не указаны. Возвращаемый тип тоже необязателен, но его можно записать, только если тело заключено в { .. }.

  • Оба примера можно записать и как обычные вложенные функции: они не захватывают никаких переменных из своего лексического окружения. Захваты мы рассмотрим дальше.

Для дальнейшего изучения

  • Возможность хранить функции в переменных относится не только к замыканиям: обычные функции тоже можно поместить в переменные и вызывать так же, как замыкания: пример на playground.

    • Указанный пример также показывает, что замыкания, которые ничего не захватывают, могут приводиться к обычному указателю на функцию.