[英]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
(無返回類型)。
它看起來應該像這樣:
case (NumV(s),NumV(x)) if(s == x) => BoolV(true)
第一個版本起作用是因為if/else
返回一個值,而單個if
則不返回。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.