Scala 2/3 の列挙型と既存の型へのフィールドの追加
scalaScala 2
Scala 2 には Java のような enum は存在せず Enumeration や case object が用いられる。 また、implicit class を import することで既存の型へフィールドを追加することができる。
sealed trait Animal
object Animal {
case object Dog extends Animal
case object Cat extends Animal
}
object Converter {
implicit class AnimalConverter(animal: Animal) {
def hello() = animal match {
case Animal.Dog => "wan!"
case Animal.Cat => "nya!"
}
}
}
import Converter.AnimalConverter
object App {
def main() = {
print(Animal.Cat.hello) // nya!
}
}
Scala 3
Scala 3 で enum や extension が追加されたことにより次のように書けるようになった。
enum Animal:
case Dog, Cat
extension (animal: Animal) {
def hello() = animal match {
case Animal.Dog => "wan!"
case Animal.Cat => "nya!"
}
}
object App {
def main() = {
print(Animal.Cat.hello()) // nya!
}
}