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

Перечисления в Rust могут иметь значения

Порадовало, что перечисления в Rust, как и в Swift, могут иметь значения:

enum Animal {
Dog(String),
Cat {name: String, age: u32},
Bear
}

let dog = Animal::Dog("Шарик".to_string());
let cat = Animal::Cat{name: "Васька".to_string(), age: 3};
let bear = Animal::Bear;

Но огорчило что нельзя добавлять вычислимые свойства и функции. В Swift пользовался этим постоянно:

enum Animal {
case dog(String)
case cat(name: String, age: Int)
case bear

var isAccessInsideHouse: Bool {
switch self {
case .dog, .cat: true
case .bear: false
}
}

func makeSound() {
switch self {
case .dog:
print("The dog is barking")
case .cat:
print("The cat is meowing")
case .bear:
print("The bear roars")
}
}
}

let dog = Animal.dog("Шарик")
let cat = Animal.cat(name: "Васька", age: 3)
let bear = Animal.bear

let isCatAccessInsideHouse = cat.isAccessInsideHouse

bear.makeSound()
08.10.2025 13 153