ケースクラス

ケースクラスはパターンマッチングのためのクラスです。
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
}