Насколько я понимаю, в 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
.(И если бы это не было поднято, код не работал бы так, как я хотел бы, чтобы он работал.)
Один из обходных путей, о котором я мог бы подумать, был бы следующий
someList.map({
def f(i: Int):Int = {
if (i%2 == 0) return i
doMoreStuffAndReturnSomething(i)
}
f
})
Однако я хотел бы знать, есть ли другой «принятый» способ сделать это.Может быть, есть возможность обойтись без имени для внутренней функции?
(Вариант использования будет состоять в том, чтобы эмулировать какую-то ценную continue
конструкцию внутри цикла.)
Редактировать
Пожалуйста, поверьте мне, что необходимо избегать выражения 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
.Извините, я думал, что это было ясно.