Порадовало, что перечисления в
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()