Enum書いたりパターンマッチで網羅させたいときに呪文のように書いてるsealed
クラス、根本的に何なんだっけと思ったのでメモ
封印されたクラス
sealed = 封印されたクラス。
sealedクラスでは、同じファイルで定義されているサブクラス以外は新しいサブクラスを追加できないようになっている。
だから、sealedクラスのサブクラスをケースクラスで定義してしまえば、それらがsealedクラスの全サブクラスになるので、パターンマッチでの網羅性が保証される(具体的にはコンパイラーが警告を発してくれる)。
sealed abstract class Color
case class Red(code: String) extends Color
case class Blue(code: String) extends Color
case class Green(code: String) extends Color
以下のような場合漏れがあり怒られる
def func(c: Color) = c match {
case Red(_) => "red"
case Brue(_) => "blue"
}