提前结束折叠的最好方法是什么?作为一个简化的示例,假设我想要求和 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
}
}
但是,这个解决方案非常丑陋(比如,如果我用。Foreach 和 return ——它会更清晰) ,最糟糕的是,即使遇到非偶数,它也会遍历整个迭代。
那么,什么是最好的方式来写这样的折叠,提前结束?我应该只是递归地写这个,还是有一种更容易被接受的方法?