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

Возврат impl Trait

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

Синтаксис

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

Пример

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

fn get_numbers() -> impl Iterator<Item = i32> { vec![1, 2, 3, 4, 5].into_iter() } fn main() { for n in get_numbers() { println!("{}", n); } }

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

1 2 3 4 5

Пример

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

use std::fmt::Display; fn make_greeting() -> impl Display { "abcde" } fn main() { let res = make_greeting(); println!("{}", res); }

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

"abcde"

Пример

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

fn positive_numbers(numbers: &[i32]) -> impl Iterator<Item = i32> + '_ { numbers.iter().copied().filter(|&n| n > 0) } fn main() { let data = vec![-2, -1, 0, 1, 2, 3]; let res: Vec<i32> = positive_numbers(&data).collect(); println!("{:?}", res); }

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

[1, 2, 3]

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

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