是否有理由避免退货声明

ope*_*sas 22 conditional scala return

有时我会看到大量的Scala代码,有几个嵌套的条件和匹配级别,使用显式返回退出函数会更清楚.

避免那些明确的退货声明有什么好处吗?

Dan*_*ral 18

A return 可以通过抛出异常实现,因此它可能比声明方法结果的标准方式一定的开销.(感谢Kim Stebel指出这并不总是,甚至可能不经常这样.)

另外,一个return闭包将从定义闭包的方法返回,而不是简单地从闭包本身返回.这使它既有用又无用,无法从闭包中返回结果.

以上的一个例子:

def find[T](seq: Seq[T], predicate: T => Boolean): Option[T] = {
  seq foreach { elem =>
    if (predicate(elem)) return Some(elem) // returns from find
  }
  None
}
Run Code Online (Sandbox Code Playgroud)

如果您仍然不理解,那么实现的匿名对象elem => if (predicate(elem)) return Some(elem)的方法是否作为参数传递给它.从中删除,它将无法正常工作.applyFunction1foreachreturn