1

我是一个斯卡拉新手。

我想了解为什么这段代码的行为不像我预期的那样

def invokeFunc( myFunc: () => String ){
    println(myFunc())
  }

  def callInvoker(){
     invokeFunc({ return "this is a string" })
  }

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

4

1 回答 1

4

这是因为return不会从您的匿名函数返回,而是从封闭方法返回。因此,当您执行此操作时,invokeFunc({ return "this is a string" })您实际上是从callInvoker(使用 value "this is a string",它只是按callInvokertype丢弃Unit)返回。

更正后的代码是:

def invokeFunc( myFunc: () => String ){
  println(myFunc())
}

def callInvoker(){
   invokeFunc{() => "this is a string" }
}

callInvoker()

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

于 2013-02-28T10:37:32.697 回答