Scala compilatore dice codice irraggiungibile, perché?
-
26-09-2019 - |
Domanda
Sono nuovo a Scala ... Ecco il codice:
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(
}
}
Sto cercando di capire che ... perché è dando che l'errore?
Nota: sto usando Scala Eclipse Plugin 2.8.0.r21376-b20100408034031 ch.epfl.lamp.sdt.feature.group
Soluzione
Il Z all'interno del pattern match non si riferisce alla z avete dichiarato di fuori, introduce una nuova variabile vincolante. Quindi il primo caso corrisponderà ogni possibile coppia (vincolante z al primo elemento della coppia e scartando il secondo) e non saranno mai raggiunto gli altri casi.
Se si sostituisce z
nel modello con
`z`
si farà riferimento alla z esistente e non introdurre un nuovo vincolante, in modo da funzionare come si intende. È anche possibile rinominare z alla Z, se non ti piace la sintassi con apici inversi.