Scala匿名函数 - 不符合我的预期

时间:2013-02-28 10:32:47

标签: scala

我是斯卡拉新手。

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

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

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

当我调用“callInvoker”时,我什么都没得到。我期望打印“这是一个字符串”,但没有任何回报。为什么呢?

1 个答案:

答案 0 :(得分:4)

这是因为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适用于封闭方法从来没有匿名的功能)。