IT干货网

Scala从for循环返回一个值

qq123 2025年12月25日 编程设计 74 0

我有以下代码

def my_function(condition: Int=>Boolean): Int = { 
  for (i <- 0 to 10) 
    if (condition(i)) return i 
 
  return -1 
} 

代码很简单:如果一些 condition满足 1 到 10 之间的数字,返回该数字,否则返回无效结果 (-1)。

它工作得很好,但它违反了一些函数式编程原则,因为 returnfor循环。如何重构此方法(我也进行了单元测试)并删除了 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 


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!