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

Тип impl Trait

Тип impl Trait используется в позиции возвращаемого типа функции или метода, а также в позиции параметра. В позиции возвращаемого типа он означает, что функция возвращает некоторый конкретный тип, реализующий указанный трейт, но имя этого типа скрыто от вызывающего кода. В позиции параметра impl Trait является синтаксическим сахаром для обобщённого параметра и означает, что функция принимает любой тип, реализующий указанный трейт.

Синтаксис

// в позиции возвращаемого типа fn имя_функции() -> impl Трейт { // тело функции } // в позиции параметра fn имя_функции(параметр: impl Трейт) { // тело функции }

Пример

Давайте напишем функцию, которая возвращает impl Iterator, скрывая конкретный тип итератора:

fn make_iter() -> impl Iterator<Item = i32> { vec![1, 2, 3, 4, 5].into_iter() } fn main() { let res: Vec<i32> = make_iter().collect(); println!("{:?}", res); }

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

[1, 2, 3, 4, 5]

Пример

Давайте используем impl Trait в позиции параметра, чтобы принять любой тип, реализующий трейт Display:

use std::fmt::Display; fn print_value(value: impl Display) { println!("{}", value); } fn main() { print_value("abcde"); print_value(12345); }

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

"abcde" 12345

Пример

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

fn make_adder(x: i32) -> impl Fn(i32) -> i32 { move |y| x + y } fn main() { let add_five = make_adder(5); let res = add_five(10); println!("{}", res); }

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

15

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

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