繁体   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