Добавить объявление

В Rust можно добавлять методы для перечислений

Продолжая изучать 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 и он используется не только для перечислений.
14.10.2025 11 159