私はスカラ座に非常に新しいですし、次のコードでいくつかの未解決の問題だ方法を持っているん:スカラ - ない場合クラスにもそれが.unapply
object exprs{
println("Welcome to the Scala worksheet")
def show(e: Expr): String = e match {
case Number(x) => x.toString
case Sum(l, r) => show(l) + " + " + show(r)
}
show(Sum(Number(1), Number(44)))
}
trait Expr {
def isNumber: Boolean
def isSum: Boolean
def numValue: Int
def leftOp: Expr
def rightOp: Expr
def eval: Int = this match {
case Number(n) => n
case Sum(e1, e2) => e1.eval + e2.eval
}
}
class Number(n: Int) extends Expr {
override def isNumber: Boolean = true
override def isSum: Boolean = false
override def numValue: Int = n
override def leftOp: Expr = throw new Error("Number.leftOp")
override def rightOp: Expr = throw new Error("Number.rightOp")
}
class Sum(e1: Expr, e2: Expr) extends Expr {
override def isNumber: Boolean = false
override def isSum: Boolean = true
override def numValue: Int = e1.eval + e2.eval
override def leftOp: Expr = e1
override def rightOp: Expr = e2
}
私は次のエラーを取得:
をエラー:オブジェクトの数がケースクラスではなく、またそれはunapplySeq /適用を解除するメンバー
エラー持っています:が見つかりません:値Sum
をどうすれば解決できますか?おかげさまで
[スカラパターンマッチングのcase節の[map expression]の可能な複製(http://stackoverflow.com/questions/27051030/map-expression-in-case-clause-in-scala-pattern-matching) –
@ TzachZoharいいえ、それはすべての質問に関連していません。 OPの問題はパターンマッチングに限定されない。ここのOPは 'object'、' class'、 'case class'を理解していません。 –