Por lo que yo entiendo, no hay manera en la Scala de tener múltiples puntos de retorno de una función anónima, es decirpuntos de retorno múltiples en Scala de cierre/función anónima
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
})
plantea una error: return outside method definition
. (Y si no fuera a aumentar que, el código no funciona como me gustaría que funcione.)
Una solución que pude cosa sería el siguiente
someList.map({
def f(i: Int):Int = {
if (i%2 == 0) return i
doMoreStuffAndReturnSomething(i)
}
f
})
sin embargo, Me gustaría saber si hay otra forma "aceptada" de hacer esto. Tal vez la posibilidad de ir sin un nombre para la función interna?
(Un caso de uso sería la de emular algunas valorada continue
constructo dentro del bucle.)
Editar
Por favor, créeme, que hay una necesidad de evitar la declaración de otra persona, ya que, la doMoreStuff
parte en realidad podría ser:
val j = someCalculation(i)
if (j == 0) return 8
val k = needForRecalculation(i)
if (k == j) return 9
finalRecalc(i)
...
el cual, cuando sólo tiene un if
- estructura else
disponibles obtiene correo asily en mal estado.
Por supuesto, en el ejemplo simple que di al comienzo, es más fácil simplemente usar else
. Lo siento, pensé que esto estaba claro.
¿Cuál es el problema al usar una instrucción else? – Patrick
En el ejemplo que das, no hay ninguna razón para evitar la palabra clave 'else'; no se evalúa ninguna expresión extra si se usa 'else', por lo que no se gana nada si se usa un retorno anticipado aquí. – Jesper
Lo siento, lo he revisado. Pensé que estaba claro que la parte 'doMoreStuff' en realidad * sí * un poco más. – Debilski