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

Метод перечисления в Rust

Метод можно привязать не только к структуре, но и к перечислению. Блок пишут после имени типа перечисления, а внутри снова перечисляют функции с получателем. Вызов через точку работает так же, как у структуры.

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

enum Status { Draft, Sent, Done, } impl Status { fn is_done(&self) -> bool { match self { Status::Done => true, Status::Draft => false, Status::Sent => false, } } }

Создадим значение и вызовем метод:

let s = Status::Sent; println!("{}", s.is_done());

На экране false. Внутри метода разбор сравнивает текущий вариант с именами по очереди и возвращает результат проверки.

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

enum Light { Red, Yellow, Green, } impl Light { fn is_red(&self) -> bool { match self { Light::Red => true, Light::Yellow => false, Light::Green => false, } } fn is_green(&self) -> bool { match self { Light::Green => true, Light::Red => false, Light::Yellow => false, } } }

Создадим значение и вызовем оба метода:

let light = Light::Green; println!("{}", light.is_red()); println!("{}", light.is_green());

Дано перечисление:

enum Role { Guest, Member, Admin, } let role = Role::Member;

Добавьте метод, который возвращает true только для варианта Admin, и выведите результат для role.

Дано перечисление:

enum Mode { Off, On, } let mode = Mode::On;

Запишите метод, который возвращает true для On и false для Off. Выведите результат.

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

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