据我了解,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
})
但是,我想知道是否还有另一种“可接受的”方式来做到这一点。也许没有为内部功能命名的可能性?
(一个用例是在循环内模拟一些有值(value)的
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
会更容易。抱歉,我认为这很清楚。 最佳答案
如果您的匿名函数是如此复杂,我将使其更加明确。匿名函数不适合几行以外的任何复杂事情。您可以通过在using方法中声明它来使方法私有(private)
def myF(i:Int):Int = {
if (i%2 == 0) return i
doMoreStuffAndReturnSomething(i)
}
someList.map(myF(_))
这是您变通方法的一种变体,但是更干净。他们都将其私有(private)化为本地方法范围。