是作为参数传入时执行的匿名函数

时间:2012-12-24 09:44:47

标签: scala

在下面的scala代码中:

object Timer
{
  def oncePerSecond(callback: () => Unit): Unit =
  {
    while (true)
    {
      callback()
      Thread.sleep(1000)
    }
  }

  def main(args: Array[String]): Unit =
  {
    oncePerSecond(() => 
      Console.println("Time flies... oh, you get the idea."))
  }
}

当作为参数传入时,匿名函数是否首先执行 然后再循环一秒钟?

1 个答案:

答案 0 :(得分:4)

它是作为其中一部分执行的:

while (true)
{
  callback()
  Thread.sleep(1000)
}

因此它将每秒执行一次,从传入时开始执行。它只在循环中执行。在传递时不会正常执行,例如

def oncePerSecond(callback: () => Unit): Unit = {
   if (....) {
      callback()
   }
}

只有在满足特定条件时才会执行该方法。

相关问题