Println与匿名函数不打印期望的值



我想知道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) )

最新更新