Per quanto mi risulta, non c'è modo a Scala di avere più punti di ritorno in una funzione anonima, cioèpunti di ritorno multipli in scala di chiusura/funzione anonima
someList.map((i) => {
if (i%2 == 0) return i // the early return allows me to avoid the else clause
doMoreStuffAndReturnSomething(i) // thing of this being a few more ifs and returns
})
solleva un error: return outside method definition
. (E se non fosse per sollevare questo, il codice sarebbe non funziona come mi piacerebbe farlo funzionare.)
Una soluzione ho potuto cosa sarebbero i seguenti
someList.map({
def f(i: Int):Int = {
if (i%2 == 0) return i
doMoreStuffAndReturnSomething(i)
}
f
})
però, Mi piacerebbe sapere se c'è un altro modo "accettato" di farlo. Forse una possibilità di andare senza un nome per la funzione interiore?
(Un caso d'uso potrebbe essere quello di emulare un certo valore continue
costrutto all'interno del ciclo.)
Modifica
prego di credermi, che v'è la necessità di evitare la dichiarazione altro, perché, il doMoreStuff
parte potrebbe effettivamente apparire come:
val j = someCalculation(i)
if (j == 0) return 8
val k = needForRecalculation(i)
if (k == j) return 9
finalRecalc(i)
...
che, quando si ha un solo if
- struttura else
disponibili ottiene e facilmente incasinato.
Naturalmente, nel semplice esempio che ho dato all'inizio, è più semplice usare solo else
. Scusa, ho pensato che fosse chiaro.
Qual è il problema utilizzando un'altra istruzione? – Patrick
Nell'esempio fornito non vi è alcun motivo per evitare la parola chiave 'else'; non viene valutata alcuna espressione extra se si usa 'else', quindi non si guadagna nulla utilizzando un ritorno anticipato qui. – Jesper
Scusa, l'ho rivisto. Pensavo fosse chiaro che la parte 'doMoreStuff' in realtà * fa * un po 'di più. – Debilski