我試圖做這樣的事情:`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