【发布时间】:2021-10-11 12:01:45
【问题描述】:
我有一个非常简单的 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 方法”
我应该怎么做才能避免这个错误? 谢谢
【问题讨论】:
-
我无法重现它:scastie.scala-lang.org/BalmungSan/N2TIb2xXQZC48wDgAYSqkA/1 所以它要么是一个 IDE 错误 (这似乎是 Scala 3,也许你正在使用 IntelliJ 并且它还不能很好地支持它) 或者您有更多代码可以显示能够重现错误 - 顺便说一句,如果您使用的是 Scala 3,您可能想改用
enum。 -
@LuisMiguelMejíaSuárez 我想你是对的,我使用的是 IntelliJ,并且在 VS Code 中效果很好。