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