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

Ограничение трейта

Ограничение трейта (trait bound) в Rust - это механизм, который позволяет наложить требование на обобщённый тип: тип должен реализовывать указанный трейт. Это даёт возможность вызывать методы этого трейта внутри обобщённой функции или структуры. Ограничение указывается после двоеточия в угловых скобках для параметра типа.

Синтаксис

fn имя_функции<T: ИмяТрейта>(параметр: T) { // тело функции }

Пример

Давайте определим трейт Summary с методом summarize и напишем функцию, которая принимает любой тип, реализующий этот трейт:

trait Summary { fn summarize(&self) -> String; } struct Article { title: String, content: String, } impl Summary for Article { fn summarize(&self) -> String { format!("{}: {}", self.title, self.content) } } fn notify<T: Summary>(item: &T) { println!("{}", item.summarize()); } fn main() { let article = Article { title: String::from("Rust"), content: String::from("abcde"), }; notify(&article); }

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

"Rust: abcde"

Пример

Давайте используем синтаксис where для ограничения трейта, что удобно при нескольких параметрах типа:

trait Summary { fn summarize(&self) -> String; } struct Article { title: String, content: String, } impl Summary for Article { fn summarize(&self) -> String { format!("{}: {}", self.title, self.content) } } fn notify<T>(item: &T) where T: Summary, { println!("{}", item.summarize()); } fn main() { let article = Article { title: String::from("12345"), content: String::from("abcde"), }; notify(&article); }

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

"12345: abcde"

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

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