当前位置: 首页 > 文档资料 > Scala 中文文档 >

Functions Call-by-Name

优质
小牛编辑
138浏览
2023-12-01

通常,函数的参数是按值参数; 也就是说,参数的值在传递给函数之前确定。 但是,如果我们需要编写一个函数来接受一个我们不想要求的表达式作为参数,直到在我们的函数中调用它? 对于这种情况,Scala提供了call-by-name参数。

按名称调用机制将代码块传递给调用,每次调用访问参数时,执行代码块并计算值。 此处,延迟打印一条消息,表明已输入该方法。 接下来,延迟打印带有其值的消息。 最后,延迟退货't'。

以下程序显示了如何实现call-by-name。

例子 (Example)

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 。 以下命令用于编译和执行此程序。

Command

\>scalac Demo.scala
\>scala Demo

输出 (Output)

In delayed method                                                             
Getting time in nano seconds                                                  
Param: 2027245119786400