Какой лучший способ разорвать складку раньше? В качестве упрощенного примера представьте, что я хочу суммировать числа в 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 - он был бы намного чище и понятнее), и, что хуже всего, он пересекает всю итерабельность, даже если он встречает не- - даже номер.
Итак, что было бы лучшим способом написать такую складку, которая заканчивается раньше? Должен ли я просто пойти и написать это рекурсивно, или есть более приемлемый способ?