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みたいに「型作るのめんどくせー」ということにはならないね!