Scala函数按名称调用

于2017-07-06由小牛君创建

分享到:


通常情况下,函数的参数是传值参数;即,参数的值在它被传递给函数之前被确定。但是,如果我们需要编写一个接收参数不希望马上计算,直到调用函数内的表达式。对于这种情况,Scala提供按名称参数调用函数。

按名称调用机制传递一个代码块给被调用者并且每次被调用方传接入参数,代码块被执行,值被计算。

object Test {
   def main(args: Array[String]) {
        delayed(time());
   }

   def time() = {
      println("Getting time in nano seconds")
      System.nanoTime
   }
   def delayed( t: => Long ) = {
      println("In delayed method")
      println("Param: " + t)
      t
   }
}

在这里,我们声明delayed方法,它通过=>符号变量的名称和类型,需要一个按名称调用参数。当上述代码被编译和执行时,它产生了以下结果:

C:/>scalac Test.scala
C:/>scala Test
In delayed method
Getting time in nano seconds
Param: 81303808765843
Getting time in nano seconds

C:/>

这里,delayed打印的消息声明,该方法已被输入。接下来,delayed打印一个与其消息的值。最后delayed方法返回 t。