Scala 按名称参数调用函数 与 =>的用法
来源:互联网 发布:禄宏微交易知乎 编辑:程序博客网 时间:2024/05/16 02:01
通常情况下,函数的参数是传值参数;即参数的值在它被传递给函数之前被确定。但是,如果我们需要编写一个接收参数不希望马上计算,直到调用函数内的表达式才进行真正的计算的函数。对于这种情况,Scala提供按名称参数调用函数。
示例代码如下:
结果:
在代码中,如果定义函数的时候,传入参数不是传入的值,而是传入的参数名称(如代码中使用t: => Long而不是t: Long),在调用该函数时,不会立即执行和参数有关的计算,而是到参数真正使用到的时候才进行计算。
结果说明:主函数调用delayed函数后,并不立即执行参数(time()函数的结果),而是跳过,直接执行delayed函数的第一行,到第二行真正使用到t时,才执行time()函数获取t的值,故有上述结果。
如果将t: => Long改成t: Long,则按照值传递进行计算,结果如下:
此时主函数调用了delayed函数后就直接先执行time()函数获取t的值
另一个示例代码如下:
这里调用了一个log函数,传入的参数中有1/0,按理说应该会报异常,但实际结果却是代码顺利的执行完成。为什么呢?这是因为我们在定义log函数的时候使用了“按名称传递参数”,只有到实际执行参数相关的计算时才会检查是否有异常。而代码中if(logEnable) println(msg)这一行代码实际根本就不会执行,自然也就不会存在检查异常的问题了
如果将msg: =>String改为msg: String,则执行代码就会报错
因为在执行到log(MSG +1 / 0)这一句时就直接计算了1/0,自然就会报错了
使用“按名称传递参数”方式的优点是:1.减少不必要的计算; 2.减少异常
- Scala 按名称参数调用函数 与 =>的用法
- Scala 可变参数函数的灵活调用
- [Scala函数特性系列]——按名称传递参数
- [Scala函数特性系列]——按名称传递参数
- Jquery自定义一个带名称的、可以传参数的函数以及setTimeout延迟调用,用法详解
- 函数调用与名称修饰
- 函数调用与名称空间
- 函数调用与参数的关系
- 函数的定义与调用&&参数数组
- scala => 用法 匿名函数
- C# 获取调用函数 参数名称和值
- 【scala 函数定义和调用】Scala的函数调用:普通函数、匿名函数、柯里化函数
- scala函数的参数学习记录
- Scala从零开始:函数参数的传名调用(call-by-name)和传值调用(call-by-value)
- 调用相同名称的基函数!
- PHP获取函数的调用者名称
- JS调用指定名称的函数
- 函数调用约定与函数名称修饰规则(一)
- leetcode算法题(JavaScript实现)
- CSS hack
- docker study --- shim
- 12.1.2
- Spark常用函数讲解之Action操作
- Scala 按名称参数调用函数 与 =>的用法
- leetcode 34. Search for a Range
- exit(0)与exit(1)、return区别
- anaconda安装feedpars
- USACO1.1.2 - Greedy Gift Givers
- Linux 服务器设置成支持中文
- block,inline和inline-block概念和区别
- SATA License——开源的泥石流
- 卷积神经网络CNN基本概念笔记[转载]