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

Выполнение трейта для типа в Rust

Тип выполняет трейт отдельным блоком, без пометки в самом типе. Структура или перечисление объявляются как раньше, а ниже или рядом пишут блок, где имя трейта связывают с этим типом и дают тела методов.

Подключим приветствие для пользователя:

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

На экране "hello, ann". Вызов user.greet() идет как обычный метод, хотя тело записано в блоке выполнения трейта, а не в impl User. Так один тип может выполнить несколько разных наборов методов разными блоками.

Тот же прием подойдет для второго типа с другим текстом:

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

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

struct Cat { name: &'static str, } let cat = Cat { name: "milo" };

Объявите набор с методом, который возвращает String вида "cat milo" из имени, и выполните его для Cat. Выведите результат вызова.

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

struct Room { number: i32, } let room = Room { number: 12 };

Добавьте набор с методом, который возвращает поле number, выполните его для Room и выведите число.

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

struct Flag { on: bool, } let flag = Flag { on: true };

Запишите набор с методом, который возвращает on, выполните для Flag и выведите значение.

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