Scala类型不匹配

时间:2015-02-19 17:13:14

标签: scala parsing

我对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)
                                ^

我在这里看不到问题,因为它与另一个问题几乎相同。我怎样才能解决这个问题以及完成这个问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

模式匹配时,if控制结构需要在=>之前。接下来,编译器会看到if没有else,并将其推断为Unit(无返回类型)。

它应该是这样的:

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

第一个版本有效,因为if/else会返回一个值,但单个if则不会。