Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗rsSpTrDf 12 of 288 menu
◀ ▶

Метод по умолчанию в трейте в Rust

Метод в трейте может уже иметь тело, и тип его не повторяет. Общую логику кладут в описание набора, а в блоке выполнения оставляют только те методы, где нужен свой вариант поведения.

Зададим приветствие с готовым шаблоном и одним методом, который тип все же должен дописать:

trait Greet { fn name(&self) -> &'static str; fn greet(&self) -> String { format!("hello, {}", self.name()) } } struct User { name: &'static str, } impl Greet for User { fn name(&self) -> &'static str { self.name } } fn main() { let user = User { name: "ann" }; let line = user.greet(); println!("{}", line); }

На экране снова "hello, ann". Метод greet вызывает name через self, хотя тело greet записано только в трейте. Для User достаточно вернуть поле в name.

При необходимости тип может переопределить и метод с телом по умолчанию:

trait Greet { fn greet(&self) -> String { String::from("hi") } } struct Bot { id: i32, } impl Greet for Bot { fn greet(&self) -> String { format!("bot {}", self.id) } } fn main() { let bot = Bot { id: 3 }; let line = bot.greet(); println!("{}", line); }

Дана структура:

struct Item { label: &'static str, } let item = Item { label: "box" };

Объявите набор: метод с телом возвращает String "item", второй метод без тела отдает label. Выполните набор для Item, допишите только второй метод, выведите оба результата вызова.

Дана структура:

struct Pair { a: i32, b: i32, } let pair = Pair { a: 2, b: 5 };

Запишите набор с методом по умолчанию, который возвращает сумму a и b, и выполните его для Pair без повторения этого метода. Выведите сумму.

Дана структура:

struct Mode { code: i32, } let mode = Mode { code: 9 };

Сделайте набор с методом по умолчанию "mode" и переопределите его для Mode, чтобы вернуть String с числом code. Выведите строку.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить