ケースクラスはパターンマッチングのためのクラスです。
class の前に case キーワードを付けるとケースクラスになります。
abstract class Expr case class Number(n: Int) extends Expr case class Sum(e1: Expr, e2: Expr) extends Expr
ケースクラスには以下の特徴があります。
- 明示的にnewキーワードを付けなくてもインスタンス化できる
- 後で追記します・・
abstract class Expr case class Number(n: Int) extends Expr case class Sum(e1: Expr, e2: Expr) extends Expr object Main extends Application { def eval(e: Expr): Int = e match { case Number(x) => x case Sum(l, r) => eval(l) + eval(r) } val exp : Expr = Sum(Number(2), Number(3)) println(eval(exp)) // 5 println(eval(Sum(Number(2), Number(5)))) // 7 }