Scala匿名函数-不像我期望的那样运行

  • 本文关键字:期望 运行 函数 Scala scala
  • 更新时间 :
  • 英文 :


我是scala新手。

我想知道为什么这段代码的行为不像我期望的那样

def invokeFunc( myFunc: () => String ){
    println(myFunc())
  }
  def callInvoker(){
     invokeFunc({ return "this is a string" })
  }

当我调用"callInvoker"时,我什么也得不到。我期望打印"这是一个字符串",但没有任何返回。为什么?

这是因为return不是从您的匿名函数返回,而是从封闭方法返回。因此,当做invokeFunc({ return "this is a string" })时,您有效地从callInvoker返回(值"this is a string",由于callInvoker的类型为Unit,因此被丢弃)。

正确的代码应该是:

def invokeFunc( myFunc: () => String ){
  println(myFunc())
}
def callInvoker(){
   invokeFunc{() => "this is a string" }
}
callInvoker()

现在您的匿名函数实际上返回"this is a string"(任何函数/方法都返回它的最后一个表达式,除非遇到显式的return,但正如我所解释的,return适用于封闭方法,而绝不适用于匿名函数)。

相关内容

最新更新