我想知道Scala匿名函数。
object hello {
def main(args: Array[String]) {
println ( ( (x:Int)=>return x+1)(1) )
}
}
我预计结果为'2'但输出为空白。我的假设错了吗?
答案 0 :(得分:3)
我没有得到一个空白,因为你引发了结果,但是出现以下编译错误:
scala> println ( ( (x:Int)=> return x+1)(1) )
<console>:8: error: return outside method definition
println ( ( (x:Int)=> return x+1)(1) )
删除return
关键字,除了以外在Scala中通常无用:
scala> println ( ( (x:Int)=>x+1)(1) )
2
确实, return
只能从方法(使用def
定义)返回。
您的函数文字调用未包含在方法体中,这就是您遇到此错误的原因。
为了说明,此代码段有效:
scala> def wrappingMethod(): Int = { //note this enclosing method
((x:Int)=> return x+1)(1) // it's valid to call return here
}
| | wrappingMethod: ()Int
scala> wrappingMethod()
res3: Int = 2
答案 1 :(得分:2)
lambda的结果是lambda体中最后一个语句的结果,所以你可以添加结果值(在本例中为literal())作为最后一行。
lambda中的return将从周围的方法返回,而不是使用异常(NonLocalReturnControl)从lambda本身返回。
在您的情况下,您的返回将返回一个单位。
有效代码如下:
println ( ( (x:Int)=> x+1)(1) )