Насколько я понимаю, нет никакого способа, в 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
конструкцию внутри цикла.)
Редактировать
Пожалуйста, поверьте мне, что есть необходимость избежать заявление еще, потому что, то doMoreStuff
часть действительно может выглядеть следующим образом:
val j = someCalculation(i)
if (j == 0) return 8
val k = needForRecalculation(i)
if (k == j) return 9
finalRecalc(i)
...
, который, когда вы только иметь if
- else
структура доступна получает е смутно перепутались.
Конечно, в простом примере, который я дал в начале, проще всего использовать else
. Извините, я подумал, что это ясно.
В чем проблема с использованием инструкции else? – Patrick
В примере, который вы приводите, нет причин вообще избегать ключевого слова 'else'; нет никакого дополнительного выражения, если вы будете использовать 'else', поэтому вы ничего не получите, используя раннее возвращение здесь. – Jesper
Извините, я пересмотрел его. Подумал, что было ясно, что часть 'doMoreStuff' на самом деле * делает * немного больше. – Debilski