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
无效。
我是 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
无效。