Scala compiler says unreachable code, why?
-
26-09-2019 - |
Question
I'm new to Scala... Here's the code:
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(
}
}
I'm trying to understand that... why is it giving that error?
Note: I'm using Scala Eclipse Plugin 2.8.0.r21376-b20100408034031 ch.epfl.lamp.sdt.feature.group
Solution
The z inside the pattern match does not refer to the z you declared outside, it introduces a new variable binding. So the first case will match every possible pair (binding z to the first element of the pair and discarding the second) and the other cases will never be reached.
If you replace z
in the pattern with
`z`
it will refer to the existing z and not introduce a new binding, so it will work as you intend. You can also rename z to Z if you don't like the syntax with backticks.
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow