scala 传名调用call-by-name

来源:互联网 发布:搜客软件 编辑:程序博客网 时间:2024/05/16 15:00

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

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

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

这就造成了一种现象,每次使用传名调用时,解释器都会计算一次表达式的值。delayed 方法, 该方法在变量名和变量类型使用 => 符号来设置传名调用

package com.expgiga.ScalaTest/**  *   */object callByNameTest {  def main(args:Array[String]): Unit = {    delayed(time())  }  def time() = {    println("获取时间,单位为纳秒")    System.nanoTime()  }  def delayed(t: => Long) = { //变量名和变量类型使用 => 符号来设置传名调用    println("delayed方法内")    println("参数:"+ t)    t  }}

执行结果:

在delayed方法内
获取时间,单位为纳秒
参数:24297258404397
获取时间,单位为纳秒


原创粉丝点击