我有以下代码
def my_function(condition: Int=>Boolean): Int = {
for (i <- 0 to 10)
if (condition(i)) return i
return -1
}
代码很简单:如果一些
condition满足 1 到 10 之间的数字,返回该数字,否则返回无效结果 (-1)。
它工作得很好,但它违反了一些函数式编程原则,因为
return在
for循环。如何重构此方法(我也进行了单元测试)并删除了 return 语句。我想我必须使用
yield ,但它似乎产生列表,我只需要一个值。
请您参考如下方法:
这是您的代码的功能翻译:
def my_function(condition: Int => Boolean): Int = {
(0 to 10).find(i => condition(i)).getOrElse(-1)
}
或者更简洁地说:
def my_function(condition: Int => Boolean): Int = {
(0 to 10).find(condition).getOrElse(-1)
}
我用过
find将产生 bool 值的函数作为参数的方法。
find方法返回集合中满足条件的第一项。它将项目作为
Option 返回所以如果没有满意的项目,那么结果将是
None .
getOrElse
Option的方法如果有则返回找到的结果,并返回
-1如果没有。
但是,您应该 不是 使用“错误代码”,例如在 Scala 编程中返回 -1。他们是不好的做法。相反,您应该抛出异常或返回
Option[Int]使得返回
None表示未找到值。正确的方法是这样的:
def my_function(condition: Int => Boolean): Option[Int] = {
(0 to 10).find(condition)
}
println(my_function(_ > 5)) // Some(6)
println(my_function(_ > 11)) // None




