РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
570 of 1245 menu

Трейт Fn

Трейт Fn - это один из трех трейтов для вызываемых значений в Rust, наряду с FnMut и FnOnce. Он описывает замыкания и функции, которые можно вызывать многократно, при этом они не изменяют захваченные переменные окружения и не потребляют их. Параметром трейт принимает тип аргументов, которые передаются при вызове, а возвращаемое значение задается через ассоциированный тип Output. Замыкания автоматически реализуют Fn, если они только читают захваченные переменные.

Синтаксис

Fn(Args) -> Output

В качестве аргументов трейт принимает кортеж типов входа, а возвращаемый тип задается через Output. Использовать трейт можно в ограничениях обобщенных типов:

fn call_it<F: Fn(i32) -> i32>(f: F, x: i32) -> i32 { f(x) }

Пример

Давайте создадим замыкание, которое складывает два числа, и вызовем его несколько раз:

fn main() { let add = |a: i32, b: i32| a + b; let res = add(2, 3); println!("{}", res); }

Результат выполнения кода:

5

Пример

Давайте передадим замыкание в функцию, которая принимает обобщенный параметр с ограничением Fn:

fn apply<F: Fn(i32) -> i32>(f: F, x: i32) -> i32 { f(x) } fn main() { let double = |x: i32| x * 2; let res = apply(double, 5); println!("{}", res); }

Результат выполнения кода:

10

Смотрите также

  • трейт FnMut,
    который описывает замыкания, изменяющие захваченное окружение
  • трейт FnOnce,
    который описывает замыкания, потребляющие захваченное окружение
  • трейт Trait Bound,
    который задает ограничения на обобщенные типы
  • трейт dyn Trait,
    который позволяет использовать трейты как динамические типы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить