【发布时间】:2012-11-12 12:13:40
【问题描述】:
很像这个问题:
Functional code for looping with early exit
说代码是
def findFirst[T](objects: List[T]):T = {
for (obj <- objects) {
if (expensiveFunc(obj) != null) return /*???*/ Some(obj)
}
None
}
如何在 scala 中从这样的 for 循环中生成单个元素?
我不想使用 find,正如原始问题中提出的那样,我很好奇它是否以及如何使用 for 循环来实现。
* 更新 *
首先,感谢所有 cmets,但我想我的问题并不清楚。我正在拍摄这样的东西:
val seven = for {
x <- 1 to 10
if x == 7
} return x
这不会编译。这两个错误是: - 返回外部方法定义 - 方法 main 有返回语句;需要结果类型
我知道 find() 在这种情况下会更好,我只是在学习和探索语言。在具有多个迭代器的更复杂的情况下,我认为使用 for 查找实际上是有用的。
感谢评论者,我将开始赏金以弥补问题的不良姿势:)
【问题讨论】:
-
代码示例精确地从
for循环返回单个元素。你想做什么不同的事情? -
将返回类型更改为
Option[T],您编写的代码将起作用。不确定我是否理解您的问题。 -
我建议您使用带有
find的版本,同时避免使用null和return以使您的代码更符合Scala 的习惯。 -
完全同意 Jesper 的观点。你的问题听起来像:是的,我知道如何以简洁明了的方式解决这个问题,但是谁能教我让这个单调和纠结?没有比基于 `find 的解决方案更好的解决方案了。
标签: scala