已弃用:非局部返回
从嵌套匿名函数中返回自 Scala 3.2.0 起已弃用。
非局部返回通过抛出和捕获 scala.runtime.NonLocalReturnException
实现。这很少是程序员的本意。它可能存在问题,因为抛出和捕获异常会带来隐藏的性能成本。此外,它是一个泄漏的实现:一个通用的异常处理程序可以拦截 NonLocalReturnException
。
非局部返回和 scala.util.control.Breaks
API 的更好替代方案由 scala.util.boundary
和 boundary.break
提供。
示例
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