相关疑难解决方法(0)

在折叠中早期中止

什么是提前终止折扣的最佳方式?作为一个简化的例子,想象一下,我想总结一下数字Iterable,但如果我遇到一些我不期望的东西(比如一个奇数),我可能想要终止.这是第一个近似值

def sumEvenNumbers(nums: Iterable[Int]): Option[Int] = {
  nums.foldLeft (Some(0): Option[Int]) {
    case (Some(s), n) if n % 2 == 0 => Some(s + n)
    case _ => None
  }
}
Run Code Online (Sandbox Code Playgroud)

然而,这个解决方案非常难看(如果我做了.foreach和返回 - 它会更清晰和更清晰),最糟糕的是,它遍历整个迭代,即使它遇到非偶数.

那么编写像这样的折叠最好的方法是什么呢?我应该去递归地写这个,还是有一个更被接受的方式?

functional-programming scala

79
推荐指数
6
解决办法
2万
查看次数

标签 统计

functional-programming ×1

scala ×1