Scala 类型不匹配

Scala type miss match

我是 scala 的新手,正在做作业。 这是我正在使用的代码:

case EqNumC(l,r)  => (interp(l),interp(r)) match{
      case (NumV(s),NumV(x)) => if(s == x) BoolV(true) else BoolV(false)
      case _ => throw InterpException("Value not found!")
    }

当我 运行 这段代码时,它工作正常并且我得到了正确的结果。然而,这在某种程度上是错误的。我决定通过这样做让它变得更好:

case EqNumC(l,r)  => (interp(l),interp(r)) match{
      case (NumV(s),NumV(x)) => if(s==x) BoolV(true)
      case (NumV(_),NumV(_)) => BoolV(false)
      case _ => throw InterpException("Value not found!")
    }

然而,当我 运行 这个时,我得到这个错误:

Status: CompilationFailure
solution.scala:129: error: type mismatch;
 found   : Unit
 required: Value
      case (NumV(s),NumV(x)) => if(s==x) BoolV(true)
                                ^

我没看出这里的问题,因为它和另一个几乎一样。我怎样才能摆脱这个问题,最好的方法是什么?

模式匹配时,if控制结构需要在=>之前。当它出现在后面时,编译器看到 if 没有 else 并将其推断为 Unit (没有 return 类型)。

它应该是这样的:

case (NumV(s),NumV(x)) if(s == x) => BoolV(true)

第一个版本有效,因为 if/else return 是一个值,但单个 if 无效。