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

Методы по умолчанию

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

Синтаксис

trait TraitName { fn method_name(&self) -> ReturnType { // default implementation } }

Пример

Давайте создадим трейт Greet с методом greet, имеющим реализацию по умолчанию, и реализуем его для структуры Person:

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

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

"Hello!"

Пример

Давайте переопределим метод greet для структуры Person, чтобы он использовал поле name:

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

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

"Hello, Alice!"

Пример

Метод по умолчанию может вызывать другие методы трейта, даже если они не имеют реализации по умолчанию. Давайте создадим трейт Summary с обязательным методом title и методом summarize с реализацией по умолчанию:

trait Summary { fn title(&self) -> String; fn summarize(&self) -> String { format!("Title: {}", self.title()) } } struct Article { title: String, } impl Summary for Article { fn title(&self) -> String { self.title.clone() } } fn main() { let a = Article { title: String::from("Rust Traits") }; println!("{}", a.summarize()); }

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

"Title: Rust Traits"

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

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