Pour autant que je le comprends, il n'y a aucun moyen de Scala d'avoir plusieurs points de retour dans une fonction anonyme, à savoirpoints de retour multiples dans la fermeture scala/fonction anonyme
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
})
soulève une error: return outside method definition
. (Et si elle était de ne pas soulever que, le code ne fonctionnerait pas comme je voudrais que cela fonctionne.)
Une solution que je pouvais chose serait la suivante
someList.map({
def f(i: Int):Int = {
if (i%2 == 0) return i
doMoreStuffAndReturnSomething(i)
}
f
})
cependant, je J'aimerais savoir s'il existe une autre façon «acceptée» de le faire. Peut-être une possibilité d'aller sans un nom pour la fonction interne?
(Un cas d'utilisation serait d'imiter une continue
construction d'une valeur dans la boucle.)
Modifier
S'il vous plaît, croyez-moi, qu'il est nécessaire d'éviter l'instruction else, parce que, le doMoreStuff
partie pourrait effectivement ressembler à:
val j = someCalculation(i)
if (j == 0) return 8
val k = needForRecalculation(i)
if (k == j) return 9
finalRecalc(i)
...
qui, lorsque vous avez seulement une if
- la structure disponible obtient else
e Asily foiré.
Bien sûr, dans l'exemple simple que j'ai donné au début, il est plus facile de simplement utiliser else
. Désolé, je pensais que c'était clair.
Quel est le problème en utilisant une instruction else? – Patrick
Dans l'exemple que vous donnez, il n'y a aucune raison d'éviter le mot-clé 'else'; il n'y a pas d'expression supplémentaire en cours d'évaluation si vous utilisez 'else', donc vous ne gagnez rien en utilisant un retour anticipé ici. – Jesper
Désolé, je l'ai révisé. Je pensais qu'il était clair que la partie 'doMoreStuff' fait * fait * un peu plus. – Debilski