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

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

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

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

object Test {def main(args: Array[String]) {delayed(time());}def time() = {println("获取时间,单位为纳秒")System.nanoTime}def delayed( t: => Long ) = {println("在 delayed 方法内")println("参数: " + t)t}
}

以上实例中我们声明了 delayed 方法,该方法在变量名和变量类型使用 => 符号来设置传名调用。执行以上代码,输出结果如下:

$ scalac Test.scala
$ scala Test
在 delayed 方法内
获取时间,单位为纳秒
参数: 241550840475831
获取时间,单位为纳秒

实例中 delay 方法打印了一条信息表示进入了该方法,接着 delay 方法打印接收到的值,最后再返回 t。

Scala 函数传名调用(call-by-name)相关推荐

  1. Scala函数传名调用

    Scala的解析器在解析函数参数时有两种方式 传值调用(call-by-value):先计算参数表达式的值,再应用到函数内部 传名调用(call-by-name):将未计算的参数表达式直接应用到函数内 ...

  2. Scala的传值调用与传名调用理解

    通常 函数/方法 的参数是传值参数,也就是说,参数的值在传递给函数之前已经确定好了.而在Scala中,方法或函数的参数可以是一个表达式,也就是可以将一个代码逻辑传递给某个方法或着函数.(这有点像C语言 ...

  3. Scala 函数声明及调用案例详解

    Scala 函数 函数是一组一起执行一个任务的语句. 您可以把代码划分到不同的函数中.如何划分代码到不同的函数中是由您来决定的,但在逻辑上,划分通常是根据每个函数执行一个特定的任务来进行的. Scal ...

  4. scala函数参数的传递:传值调用和传名调用

    函数参数的传递有两种:传值调用和传名调用 传值调用:先计算参数表达式的值,再应用到函数内部 传名调用:将未计算的参数表达式直接应用到函数内部 object Add{def addByName(a: I ...

  5. 浅析scala传名调用和传值调用,: = 与() : =

    函数调用一般传值调用,但是,在某些情况下,我们不希望函数的值首先被计算,而是等到调用的时候再来进行计算,为了适应这种情景,scala提供了传名调用. 先来看两个例子: package test/*** ...

  6. scala传值调用和传名调用

    代码: 传值调用: 先计算balance的值 把这个值作为参数传递给printmoney 传名调用:传递的是函数 将balance方法的名称传递到方法内部 传值调用: object ZFBToPay ...

  7. Scala 传值调用和传名调用

    传值调用时,参数只在调用时计算一次,后续重复使用计算的结果 传名调用时,参数在调用时不会计算,只有真正用到参数的时候才会计算(x:=> Int) object ScalaFunction {va ...

  8. Scala函数的调用

    scala函数分为: 传名调用和传值调用 传名调用: 就是将未计算的参数表达式直接应用到函数内部 传值调用: 先计算参数表达式的值,再应用到函数内部案例: object FunctionTest {d ...

  9. scala的传名参数

    scala如果你想实现像if ,while等类似的控制结构,根本没有值要传入花括号{}直接的代码里.要怎么实现. 比如说,我们要实现一个断言的控制结构,myAssert(), myAssert函数参考 ...

最新文章

  1. mysql数据库解压安装教程_MySQL数据库之windows 10下解压版MySql安装配置方法教程...
  2. 线程同步monitor
  3. TLD(Tracking-Learning-Detection)学习与源码理解之(六)
  4. linux的网络不可达问题,我的服务器日志中的linux – (网络不可达)错误
  5. Spring Tool Suite记录
  6. C++ map注意事项
  7. 【ArcGIS遇上Python】ArcGIS Python获取Shapefile矢量数据字段名称
  8. tbase同步mysql_mysql主从同步
  9. 人工智能自拍之后,会怎样给自己P图?
  10. [置顶] 如何把你的笔记本电脑变成一个Wi-Fi路由器在Windows 7 8?
  11. Centos7 修改、更换源
  12. 千亿级数量下日志分析系统的技术架构选型
  13. 第490篇--Accessing the Domain info is denied in IIS.
  14. C盘清理工具Dism++教程
  15. 多智能体MAPPO代码环境配置以及代码讲解
  16. VMware用rz传输文件
  17. QQ浏览器 不支持html5,浏览器常见问题_浏览器高级功能_浏览器在线帮助-QQ浏览器官网...
  18. alt+w热键组合无法使用
  19. 学习Java一般多久?
  20. activiti 汉化

热门文章

  1. 中国剩余定理(孙子定理)(精华详细版!)
  2. php 虚基类,1.9 多态
  3. xp系统怎么关dhcp服务器,怎样解决Win XP操作系统DHCP故障:获取未使用的IP地址
  4. Markdown编辑表格实现合并单元格、单元格内容换行
  5. Java获取并输出两日期间的所有日期 .
  6. 编写字符串反转函数 .
  7. parsel安装老是失败_Photoshop安装失败解决办法
  8. firedac连接mysql,FireDAC连接数据库
  9. left join on多表关联_资深DBA整理MySQL基础知识三:迅速理解MySQL的关联和子查询...
  10. python 完全面向对象_Python面向对象