Scala compilador dice código inalcanzable, ¿por qué?
-
26-09-2019 - |
Pregunta
Soy nuevo en Scala ... Aquí está el código:
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(
}
}
Estoy tratando de entender que ... ¿por qué se da ese error?
Nota: Estoy usando Scala Eclipse Plugin 2.8.0.r21376-b20100408034031 ch.epfl.lamp.sdt.feature.group
Solución
El z dentro de la coincidencia de patrón no se refiere a la z se declara fuera, se introduce una nueva unión variable. Así el primer caso coincidirá con cada posible par (z unión al primer elemento del par y descartar el segundo) y nunca serán alcanzado los otros casos.
Si reemplaza z
en el patrón con
`z`
se referirá a la z existente y no introducir una nueva unión, por lo que funciona como deseaba. También puede cambiar el nombre de Z a Z, si no te gusta la sintaxis con acentos abiertos.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow