Scala编译器说无法访问代码,为什么?

时间:2010-04-13 18:41:32

标签: scala unreachable-code

我是Scala的新手...这是代码:

  def ack2(m: BigInt, n: BigInt): BigInt = {
      val z = BigInt(0)
      (m,n) match {
          case (z,_) => n+1
          case (_,z) => ack2(m-1,1) // Compiler says unreachable code on the paren of ack2(
          case _ => ack2(m-1, ack2(m, n-1)) // Compiler says unreachable code on the paren of ack2(
      }
  }

我正在努力理解......为什么会出现这个错误?

注意:我正在使用 Scala Eclipse插件2.8.0.r21376-b20100408034031 ch.epfl.lamp.sdt.feature.group

1 个答案:

答案 0 :(得分:29)

模式匹配中的z不是指你在外面声明的z,它引入了一个新的变量绑定。因此,第一种情况将匹配每个可能的对(将z绑定到该对的第一个元素并丢弃第二个),其他情况将永远不会到达。

如果用

替换模式中的z
`z`

它将引用现有的z而不引入新的绑定,因此它将按您的意图工作。如果您不喜欢使用反引号的语法,也可以将z重命名为Z。