我有一个非常简单的Scala代码,我想在其中应用模式匹配:
trait Expr
case class Number(n: Int) extends Expr
case class Sum(a: Expr, b: Expr) extends Expr
case class Prod(a: Expr, b: Expr) extends Expr
def eval(e: Expr): Int = e match
case Number(n) => n
case Sum(a, b) => eval(a) + eval(b)
case Prod(a, b) => eval(a) * eval(b)
但是当我运行代码时,错误出现了:"Number不能用作模式中的提取器,因为它缺乏unapply或unapplySeq方法">
我该怎么做才能避免这个错误?谢谢你
您可能已经在eval
定义的范围内导入了java.lang.Number
。
确保导入您的Number
定义(通过删除Java导入或重命名它,无论哪种方式最适合您的用例…),它将正常工作。
显然这是真的之前所说的,java.lang.Number
阴影case class Number
在IntelliJ运行时。如果不想放弃IDE,还可以将case class Number
重命名为case class Num
。这样,代码至少可以在我的机器上正常运行。