A return
puede ser implementado por lanzar una excepción, por lo que puede tener una cierta sobrecarga sobre la forma estándar de declarar el resultado de un método. (Gracias por Kim Stebel por señalar que esto no es siempre, tal vez ni siquiera a menudo, el caso.)
Además, un return
en un cierre volverá a partir del método en el que se define el cierre, y no simplemente desde el cierre en sí. Eso hace que sea útil para eso, e inútil para devolver un resultado de cierres.
Un ejemplo de lo anterior:
def find[T](seq: Seq[T], predicate: T => Boolean): Option[T] = {
seq foreach { elem =>
if (predicate(elem)) return Some(elem) // returns from find
}
None
}
Si todavía no entiende, elem => if (predicate(elem)) return Some(elem)
es el método apply
de un objeto anónimo del que implementa Function1
y se pasa a foreach
como parámetro. Elimine return
de él, y no funcionará.
aquí está una publicación de blog relacionada en [return] (https://tpolecat.github.io/2014/05/09/return.html) – BlueSky