Expr1 ::= ‘return’ [Expr]
method which is generated by the compiler as an expansion of an anonymous function does not count as a named function in the source program, and therefore is never the target of a return expression.
Returning from a nested anonymous function is implemented by throwing and
catching a scala.runtime.NonLocalReturnException
. Any exception catches between the point of return and the enclosing methods might see the exception. A key comparison makes sure that these exceptions are only caught by the method instance which is terminated by the return
If the return
expression is itself part of an anonymous function, it is possible that
the enclosing instance of f
has already returned before the return expression is executed. In that case, the thrown scala.runtime.NonLocalReturnException
will not be caught, and will propagate up the call stack.