在匿名函数中使用 return 关键字可以提早跳出该函数时报告。 非本地返回值通过抛出和捕获 scala.runtime.NonLocalReturnException-s 来实现。 这通常不是程序员的本意。 由于抛出和捕获异常的隐藏性能开销,这可能会带来问题。

此外,它是一个有漏洞的实现:一个捕获所有异常的处理程序可以拦截 NonLocalReturnException


def foo(numbers: Seq[Int]): Int =
  numbers.map { n =>
    if (n > 5)
      return 0 // highlighted
    n * 2
  }.sum