回答
甲return
可以是通过抛出异常来实现,因此它可以具有优于声明一个方法的结果的标准方法一定开销。 (感谢金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
}
如果您还有不明白的,elem => if (predicate(elem)) return Some(elem)
就是一个很好的匿名对象的方法apply
实现Function1
并传递到foreach
作为参数。从中删除return
,它不起作用。
返回不总是使用异常实现。只需编译一个带有return语句的简单while循环,并使用javap -v查看输出。实际上,我希望看到任何以这种方式实现return _is_的示例。 –
@KimStebel有趣的是,我不知道Scala优化了这种情况。举一个例子,看看我的答案中的代码。 –
我确定要说的是,当你说clousure的返回将从它所定义的方法返回时,而不是从它的clousure返回。我已经烧了,就像你在这里解释的那样http://stackoverflow.com/questions/11929485/scala-problems-with-return-statement – opensas
一个缺点是无法推断返回类型。其他一切都是风格问题。对你来说似乎不清楚或困惑的东西对其他人来说可能是完全“自然的”。
显式返回会打破控制流。例如,如果你有一个像
if(isAuth(user)) {
return getProfile(user)
}
else {
return None
}
控制结构(如果)没有完成,这就是为什么我认为这是比较混乱的原因的声明。对我来说,这与断言是类似的。此外Scalas“一切价值”的原则减少了需要使用这将导致更少的人明确的收益使用关键字这是只为DEF语句有用:
// start
def someString:String = return "somestring"
// def without return
def someString = "somestring"
// after refactoring
val someString = "somestring"
您将看到该类型的注释必须添加和当将def更改为val时,需要删除返回值。
- 1. Android如果语句没有被某些原因访问
- 2. 避免原则返回所有实体
- 3. 返回上一页时是否可以避免重新加载?
- 4. PatternSyntaxException是否可以有很多原因?
- 5. 是否可以有条件地设置MySQL更新语句中的某些值?
- 6. 避免isInstance语句
- 7. 是否可以避免执行某个命令?
- 8. 返回语句是否可以像printf一样格式化?
- 9. 是否可以使用1个case语句返回多个列?
- 10. 避免在某些条件下返回结果集
- 11. 避免回滚插入语句
- 12. 这些特殊情况是否可以避免?
- 13. 避免某些遍历
- 14. 什么是可能的原因导致堆空间用完以及是否有避免它的最佳做法?
- 15. SQL SELECT语句<经营者因某些原因无法工作
- 16. 是否有可能在PHP返回语句中执行赋值?
- 17. 某些测试用例的函数没有返回正确的返回语句
- 18. pdo是否逃避语句?
- 19. 简化select case语句以避免DRY
- 20. 缩短函数以避免语句
- 21. (Google Docs)是否可以保护某些细胞免于移动?
- 22. 是否可以为某些包创建Maven原型?
- 23. 是否可以使用IN子句返回select语句的结果?
- 24. C++是否执行返回语句?
- 25. PHP会因某些原因无法
- 26. 应用程序崩溃因某些原因:返回和分配问题
- 27. PayPal自动返回需要十秒钟,是否有可能避免?
- 28. 是否可以按某些值分组?
- 29. 有没有一种方法可以让PHP在返回语句后执行某些操作?
- 30. 如何避免列出PostgreSQL返回语句中的所有表列?
这是一篇关于[return](https://tpolecat.github.io/2014/05/09/return.html)的相关博客文章 – BlueSky