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

Константа трейта в Rust

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

Зададим предел и две разные двери с разным лимитом:

trait Limit { const MAX: i32; } struct Door { id: i32, } impl Limit for Door { const MAX: i32 = 3; } struct Gate { id: i32, } impl Limit for Gate { const MAX: i32 = 5; } fn main() { println!("{} {}", Door::MAX, Gate::MAX); }

На экране "3 5". Обращение идет через имя типа и имя константы из трейта, без создания значения. Так лимит можно читать в общих функциях, ограниченных этим набором.

Константу из трейта можно использовать в методе того же блока выполнения:

trait Limit { const MAX: i32; fn within(&self, value: i32) -> bool; } struct Door { id: i32, } impl Limit for Door { const MAX: i32 = 3; fn within(&self, value: i32) -> bool { value <= Self::MAX } } fn main() { let door = Door { id: 1 }; let ok = door.within(2); println!("{}", ok); }

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

struct Step { level: i32, }

Объявите трейт с константой MAX: i32, подставьте 10 для Step и выведите лимит через имя типа.

Дан следующий код:

struct Room { name: &'static str, }

Добавьте трейт с константой MAX: i32, подставьте 2 для Room и метод, который сравнивает число гостей с Self::MAX. Проверьте значение 1 и выведите результат.

Скажите, чем ассоциированная константа в трейте отличается от поля структуры типа i32.

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