Scalaでパターンマッチ

ScalaすげーよScala
Scalaのケースクラス便利そう。


ということでパターンマッチの練習。
「5+2*3」をCaseクラス使って再現してみた。

package exprmatch
object Main {
  def main(args: Array[String]) :Unit = {
    val v = Add(Number(5),Mult(Number(2),Number(3)))
    println(v.eval)
  }
}
abstract class Expr
{
    def eval : Double = this match{
      case Number(v) => v
      case Add(l,r) => l.Eval + r.Eval
      case Mult(l,r) => l.Eval * r.Eval
    }
}
case class Number(v : Double) extends Expr
case class Add(l : Expr, r : Expr ) extends Expr
case class Mult(l :Expr, r :Expr )extends Expr

・・・なにこの短さ。
特にメソッドのないクラスなら一行で宣言できるから、Javaみたいに「型作るのめんどくせー」ということにはならないね!