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

Объявление трейта в Rust

Набор методов объявляют отдельно от типов, которые его выполнят. В одном месте файла записывают имя трейта и сигнатуры действий: какие параметры принимает метод и что возвращает. Сами тела для конкретных структур появятся позже в другом блоке.

Опишем трейт приветствия с одним методом, который строит строку по значению:

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

Здесь Greet пока только задает форму метода greet. Структура User существует сама по себе, пока тип не начнет выполнять этот набор. Такой порядок помогает сначала договориться о действиях, а потом распределить реализации по типам.

В одном трейте можно перечислить несколько методов, если сценарий требует больше одного шага:

trait Label { fn title(&self) -> &'static str; fn code(&self) -> i32; } struct Tag { title: &'static str, code: i32, } fn main() { let tag = Tag { title: "ok", code: 1 }; println!("{}", tag.title); }

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

struct Book { title: &'static str, } let book = Book { title: "rust" };

Объявите набор с методом, который по общей ссылке возвращает поле title как &'static str. Пока достаточно описания без выполнения для Book.

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

struct Point { x: i32, y: i32, } let point = Point { x: 3, y: 4 };

Запишите отдельное описание с двумя методами: один возвращает x, другой y. Тип пока не связывайте с этим набором.

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

struct Note { text: &'static str, } let note = Note { text: "hi" };

Придумайте имя набора и объявите метод, который возвращает String из поля text. Выполнение для Note оставьте на потом.

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