私が理解している限り、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
ます。(そして、それを上げなければ、コードは私が望んでいるように機能しません。)
私ができる1つの回避策は次のとおりです
someList.map({
def f(i: Int):Int = {
if (i%2 == 0) return i
doMoreStuffAndReturnSomething(i)
}
f
})
ただし、これを行う別の「受け入れられた」方法があるかどうかを知りたいです。内部関数の名前なしで行く可能性はありますか?
continue
(使用例は、ループ内で値を持つ構造をエミュレートすることです。)
編集
doMoreStuff
その部分は実際には次のようになる可能性があるため、elseステートメントを回避する必要があることを信じてください。
val j = someCalculation(i)
if (j == 0) return 8
val k = needForRecalculation(i)
if (k == j) return 9
finalRecalc(i)
...
–<code>else 構造しかif
利用できない場合、これは簡単にめちゃくちゃになります。
もちろん、最初に示した単純な例では、 を使用するだけの方が簡単ですelse
。申し訳ありませんが、これは明らかだと思いました。