不能用作模式中的提取器,因为它缺少unapply或unapplySeq方法



我有一个非常简单的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。这样,代码至少可以在我的机器上正常运行。

相关内容

最新更新