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