我对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)
^
我在这里看不到问题,因为它与另一个问题几乎相同。我怎样才能解决这个问题以及完成这个问题的最佳方法是什么?
答案 0 :(得分:3)
模式匹配时,if
控制结构需要在=>
之前。接下来,编译器会看到if
没有else
,并将其推断为Unit
(无返回类型)。
它应该是这样的:
case (NumV(s),NumV(x)) if(s == x) => BoolV(true)
第一个版本有效,因为if/else
会返回一个值,但单个if
则不会。