当前位置: 代码迷 >> 综合 >> Scala 学习笔记(一)------函数传名调用(call-by-name)
  详细解决方案

Scala 学习笔记(一)------函数传名调用(call-by-name)

热度:11   发布时间:2024-01-17 12:52:28.0

Scala的解释器在解析函数参数(function arguments)时有两种方式:

传值调用(call-by-value):先计算参数表达式的值,再应用到函数内部

传名调用(call-by-name):将未计算的参数表达式直接应用到函数内部

在进入函数内部前,传值调用方式就已经将参数表达式的值计算完毕,而传名调用是在函数内部进行参数表达式的值计算的。

这就造成了一种现象,每次使用传名调用时,解释器都会计算一次表达式的值

object Test1{def main(argc: Array[String]) {delayed(time());}def time()={println("get time:");System.nanoTime;}def delayed( tt: => Long )={println("in delayed");println("parameter: "+tt)tt}
}
 下面是编译、执行
[root@node1 scala]# scalac Test1.scala 
[root@node1 scala]# scala Test1
in delayed
get time:
parameter: 1826488355705251
get time:


传名调用使用=>表示,跟传值调用的区别就在于,

传名调用是把函数名字传递过去,使用时才真正执行函数
传值调用是首先计算函数值,然后把值传过去


  相关解决方案