首页 > 解决方案 > 不能用作模式中的提取器,因为它缺少 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)

但是当我运行代码时,错误上升:“数字不能用作模式中的提取器,因为它缺少 unapply 或 unapplySeq 方法”

我应该怎么做才能避免这个错误?谢谢

标签: scalapattern-matching

解决方案


您可能已java.lang.Numbereval定义范围内导入。

确保改为导入您的Number定义(通过删除 Java 导入或重命名它,无论哪种方式最适合您的用例......)它会正常工作。


推荐阅读