我试图做这样的事情:`return`在Scala的函数文本
var fun : (Int,Int) => Double = (a,b) =>
{
// do something
return 1.0
}
然而,我的IDE投诉Return statement outside method definition
。那么如何在scala中的函数文字中明确地给出return语句呢?
我试图做这样的事情:`return`在Scala的函数文本
var fun : (Int,Int) => Double = (a,b) =>
{
// do something
return 1.0
}
然而,我的IDE投诉Return statement outside method definition
。那么如何在scala中的函数文字中明确地给出return语句呢?
在斯卡拉从封闭的方法体一return
语句返回。如果return
出现在函数文字中,则使用异常抛出来实现。 return
会在函数内部抛出一个异常,然后被捕获的是封闭的方法。如果发现一个0
def geometricAverage(l: List[Double]): Double = {
val product = l.foldLeft(1.0) { (z, x) =>
if (x == 0) return 0 else z * x
}
Math.pow(product, 1.0/l.length)
}
在这个例子中return
从geometricAverage
方法返回,使其能够即刻完成:斯卡拉以这种方式工作,以使得使用该采取隐形功能,如自定义控制结构。您不需要知道foldLeft
是一种采用函数而不是内置构造来实现此功能的方法。
Scala中的首选是使用功能风格编写函数,利用Scala的面向表达的特性来使return
不必要。例如:
val fun: (Int,Int) => Double = (a,b) => {
if (a == b) {
// side effect here, if desired
0.0
} else {
// side effect here, if desired
1.0
}
}
如果你真的想在函数的定义中使用return
,就可以实现相应的功能界面手动而不是使用文本函数:
val fun = new Function2[Int, Int, Double] {
def apply(x: Int, y: Int): Double = {
if (x == y)
return 0.0
1.0
}
}
但这不是习惯和强烈劝阻。
'return'也可用于从命名函数返回。 –
不要使用return,它会让Scala哭泣。
scala> var fun: (Int, Int) => Double = (a, b) => {
| // do something
| 1.0
| }
fun: (Int, Int) => Double = <function2>
scala> fun(1, 2)
res4: Double = 1.0
或者更好的是:
scala> def fun: (Int, Int) => Double = (a, b) => {
| // do something
| 1.0
| }
fun: (Int, Int) => Double
scala> fun(1, 2)
res4: Double = 1.0
我该如何在scala中的函数文字中明确给出return语句?
你不行。这是通过the language specification部6.20,返回表达式回答:
一个返回表达
return e
必须命名 方法或函数一些封闭的体内发生。由编译器生成的作为匿名函数扩展的方法不会被视为源程序中的命名函数,因此从不是返回表达式的目标。
我已经回答了一个类似的问题:http:// stackoverflow。com/a/24241486/985949 – Mik378