Scala - 按名调用函数



通常,函数的参数是按值传递的参数;也就是说,参数的值在传递给函数之前就已经确定。但是,如果我们需要编写一个函数,该函数接受一个参数,我们不希望在函数内部调用之前对该参数进行求值,该怎么办?在这种情况下,Scala 提供了**按名调用**参数。

按名调用的机制将代码块传递给调用,并且每次调用访问参数时,都会执行代码块并计算其值。这里,`delayed` 打印一条消息,表明该方法已进入。接下来,`delayed` 打印一条包含其值的消息。最后,`delayed` 返回 't'。

下面的程序演示了如何实现按名调用。

示例

object Demo {
   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)
   }
}

将上述程序保存为 **Demo.scala**。使用以下命令编译并执行此程序。

命令

\>scalac Demo.scala
\>scala Demo

输出

In delayed method                                                             
Getting time in nano seconds                                                  
Param: 2027245119786400 
scala_functions.htm
广告