据我了解,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
可用的 –<code>else 结构时,它很容易搞砸。
当然,在我一开始给出的简单示例中,使用else
. 对不起,我以为这很清楚。