我对 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
控制结构需要位于 =>
之前。当它出现后,编译器会看到一个没有 else
的 if
并推断它是 Unit
(无返回类型)。
它应该看起来像这样:
case (NumV(s),NumV(x)) if(s == x) => BoolV(true)
第一个版本可以工作,因为 if/else
返回一个值,但单个 if
则不能。
关于Scala 类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28612590/