我想知道Scala的匿名函数。
object hello {
def main(args: Array[String]) {
println ( ( (x:Int)=>return x+1)(1) )
}
}
我期望结果是'2',但输出是空白的。我的假设错了吗?
我没有得到一个空白,因为你唤起的结果,但以下编译器错误:
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
lambda的结果是lambda主体中最后一条语句的结果,因此您可以直接添加结果值(在本例中为literal())作为最后一行。
return in lambda将使用异常(NonLocalReturnControl)从周围的方法返回,而不是从lambda本身返回。
在你的例子中,return将返回一个Unit。
有效代码如下:
println ( ( (x:Int)=> x+1)(1) )