Насколько я понимаю, в Scala нет способа иметь несколько точек возврата в анонимной функции, т.е.
someList.map((i) => {
if (i%2 == 0) return i // the early return allows me to avoid the else clause
doMoreStuffAndReturnSomething(i) // thing of this being a few more ifs and returns
})
вызывает error: return outside method definition
. (И если он не смог бы повысить это, код не работал бы, так как Id мог бы работать.)
Одним из способов решения проблемы я мог бы быть следующий
someList.map({
def f(i: Int):Int = {
if (i%2 == 0) return i
doMoreStuffAndReturnSomething(i)
}
f
})
однако, Id нравится знать, есть ли другой "принятый способ сделать это". Может быть, возможность пойти без имени для внутренней функции?
(Использовать случай должен был бы эмулировать некоторую оцененную конструкцию continue
внутри цикла.)
Edit
Пожалуйста, поверьте мне, что необходимо избегать оператора else, потому что часть doMoreStuff
может выглядеть так:
val j = someCalculation(i)
if (j == 0) return 8
val k = needForRecalculation(i)
if (k == j) return 9
finalRecalc(i)
...
который, когда у вас есть только структура if
- else
, становится легко перепутанной.
Конечно, в простом примере, который я дал в начале, проще просто использовать else
. Извините, я думал, что это было ясно.