Продолжая изучать
Rust я понял, что ошибся. Оказывается здесь, так же как и в
Swift можно добавлять методы для перечислений.
Делается это через блок
impl:
enum TrafficLight {
Red,
Yellow,
Green
}
impl TrafficLight {
fn duration(&self) -> u8 {
match self {
TrafficLight::Red => 60,
TrafficLight::Yellow => 5,
TrafficLight::Green => 45
}
}
}
let light = TrafficLight::Red;
println!("Длительность: {} сек", light.duration()); // 60
Но такой подход кажется многословным. Отдельный блок
impl и в каждом методе нужно явно передавать ссылку на текущий объект перечислений
&self. В
Swift методы можно писать прямо внутри
enum, что выглядит компактнее:
enum TrafficLight {
case red, yellow, green
func duration() -> Int {
switch self {
case .red: 60
case .yellow: 5
case .green: 45
}
}
}
let light = TrafficLight.red
print("Длительность: \(light.duration()) сек") // 60
Сам
impl мне напомнил
extension в
Swift и он используется не только для перечислений.