Прервать в начале

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

Итак, что было бы лучшим способом написать фолд как этот, который заканчивается рано? Должен ли я просто пойти и написать это рекурсивно, или есть более приемлемый способ?

Ответы на вопрос(10)

Ваш ответ на вопрос