gpt4 book ai didi

scala - scala闭包/匿名函数中的多个返回点

转载 作者:行者123 更新时间:2023-12-04 02:06:22 25 4
gpt4 key购买 nike

据我了解,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)
...

其中,当您只有 ifelse可用的结构很容易搞砸。

当然,在我一开始给出的简单例子中,直接使用 else比较容易。 .对不起,我以为这很清楚。

最佳答案

如果您的匿名函数那么复杂,我会让它更明确。匿名函数不适合比几行更复杂的东西。您可以通过在 using 方法中声明它来使其成为私有(private)方法

def myF(i:Int):Int = {
if (i%2 == 0) return i
doMoreStuffAndReturnSomething(i)
}
someList.map(myF(_))

这是您的变通方法的一种变体,但更简洁。他们都将其保持为本地方法范围的私有(private)。

关于scala - scala闭包/匿名函数中的多个返回点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2898896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com