Deprecated: Nonlocal Returns
Returning from nested anonymous functions is deprecated since Scala 3.2.0.
Nonlocal returns are implemented by throwing and catching scala.runtime.NonLocalReturnException
-s. This is rarely what is intended by the programmer. It can be problematic because of the hidden performance cost of throwing and catching exceptions. Furthermore, it is a leaky implementation: a catch-all exception handler can intercept a NonLocalReturnException
.
A better alternative to nonlocal returns and also the scala.util.control.Breaks
API is provided by scala.util.boundary
and boundary.break
.
Example:
import scala.util.boundary, boundary.break
def firstIndex[T](xs: List[T], elem: T): Int =
boundary:
for (x, i) <- xs.zipWithIndex do
if x == elem then break(i)
-1