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

Реализация impl Trait for

Конструкция impl Trait for используется для реализации типажа для определённого типа. Она сообщает компилятору, что тип реализует поведение, описанное в типаже. Слева от ключевого слова for указывается типаж, а справа - тип, для которого выполняется реализация.

Синтаксис

impl Trait for Type { // methods }

Пример

Давайте объявим типаж Greet с одним методом и реализуем его для структуры Person:

trait Greet { fn hello(&self) -> String; } struct Person { name: String, } impl Greet for Person { fn hello(&self) -> String { format!("Hello, {}!", self.name) } } fn main() { let person = Person { name: String::from("abcde") }; println!("{}", person.hello()); }

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

"Hello, abcde!"

Пример

Реализацию можно выполнить и для примитивного типа. Давайте реализуем типаж Doubler для i32:

trait Doubler { fn double(&self) -> i32; } impl Doubler for i32 { fn double(&self) -> i32 { self * 2 } } fn main() { let num = 5; println!("{}", num.double()); }

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

10

Пример

Один типаж можно реализовать сразу для нескольких типов. Давайте реализуем типаж Describe для i32 и для String:

trait Describe { fn describe(&self) -> String; } impl Describe for i32 { fn describe(&self) -> String { format!("number: {}", self) } } impl Describe for String { fn describe(&self) -> String { format!("string: {}", self) } } fn main() { let num = 12345; let text = String::from("abcde"); println!("{}", num.describe()); println!("{}", text.describe()); }

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

"number: 12345" "string: abcde"

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

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