簡體   English   中英

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 (無返回類型)。

它看起來應該像這樣:

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

第一個版本起作用是因為if/else返回一個值,而單個if則不返回。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM