Scala 2 での enum
- Scala 2 には予約語としての
enumはありません - Enumeration が準備されていますが、一般的には利用されていません
- 他の言語での
enumの代用として Scala ではcase classとcase objectを使います
case object を使う
- 基底(enum の型)になるクラスを
sealed traitで作ります。 - enum のメンバーとして、それを継承する
final case objectを作ります。
sealed trait Color final case object Black extends Color final case object White extends Color
利用時には match を使います。
color match { case Black => ... case White => ... }
case class を使う
case objectの他にも、case classを使うこともできます。case classはcase objectと違い、パターンマッチに使える値を持つことができます。
sealed trait Color final case class Rgb(r: Int, g: Int, b: Int) extends Color final case class Hsl(h: Int, s: Int, l: Int) extends Color color match { case Rgb(r, g, b) => ... case Hsl(h, s, l) => ... }
case object と case class を混ぜる
- enum のメンバーは、
case objectとcase classを混ぜることができます。 - enum の中に更にパラメータがある場合は
case class、無い場合はcase objectを使います。
sealed trait Color final case object Black extends Color final case object White extends Color final case class Rgb(r: Int, g: Int, b: Int) extends Color final case class Hsl(h: Int, s: Int, l: Int) extends Color color match { case Black => ... case White => ... case Rgb(r, g, b) => ... case Hsl(h, s, l) => ... }