Scala 函数的按名传递

Scala 函数的按名传递

通常,函数的参数是按值传递的;也就是说,在参数传递给函数之前,参数的值已经确定了。但是如果我们需要编写一个函数,它接受一个表达式作为参数,但我们不希望在调用函数之前对该表达式进行求值,那么该怎么办呢?对于这种情况,Scala 提供了 按名传递(call-by-name) 参数。

按名传递机制将一个代码块传递给调用,并且每次调用访问参数时,代码块都会被执行并计算其值。在这里,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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程