在 GitHub 上编辑此页面

已弃用:非局部返回

从嵌套匿名函数中返回自 Scala 3.2.0 起已弃用。

非局部返回通过抛出和捕获 scala.runtime.NonLocalReturnException 实现。这很少是程序员的本意。它可能存在问题,因为抛出和捕获异常会带来隐藏的性能成本。此外,它是一个泄漏的实现:一个通用的异常处理程序可以拦截 NonLocalReturnException

非局部返回和 scala.util.control.Breaks API 的更好替代方案由 scala.util.boundaryboundary.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