[Scala函数特性系列]——按名称传递参数
通常情况下,函数的参数是传值参数;即参数的值在它被传递给函数之前被确定。但是,如果我们需要编写一个接收参数不希望马上计算,直到调用函数内的表达式才进行真正的计算的函数。对于这种情况,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提供 ...
- MVC学习系列2--向Action方法传递参数
首先,新建一个web项目,新建一个Home控制器,默认的代码如下: public class HomeController : Controller { // GET: Home public Act ...
- C++中多维数组传递参数
在c++自定义函数时我们有时需要传递参数,有时以多维数组作为参数,这里就遇到了多维数组该怎么传值的问题了,首先我们看看一维数组是怎么做的. void print_num(int num[], int ...
- 02.Scala高级特性:第6节 高阶函数;第7节 隐式转换和隐式参数
Scala高级特性 1. 课程目标 1.1. 目标一:深入理解高阶函数 1.2. 目标二:深入理解隐式转换 2. 高阶函数 2.1. 概念 Scala混合了面向对象和函数式的特 ...
- 【WebApi系列】详解WebApi如何传递参数
WebApi系列文章 [01]浅谈HTTP在WebApi开发中的运用 [02]聊聊WebApi体系结构 [03]详解WebApi参数的传递 [04]详解WebApi测试和PostMan [05]浅谈W ...
- URL中传递参数给视图函数
1. 采用在url中使用变量的方式: 在path的第一个参数中,使用<参数名>的方式可以传递参数.然后在视图函数中也要写一个参数,视图函数中的参数必须和url中的参数名称保持一致,不然就找 ...
- Scala 函数入门之默认参数和带名参数
Scala 默认参数 在Scala中,有时我们调用某些函数时,不希望给出参数的具体值,而希望使用参数自身默认的值,此时就定义在定义函数时使用默认参数. def sayHello(firstName: ...
- 【ABAP系列】SAP ABAP 给初学者-解读function函数的export和import等参数
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP 给初学者-解读 ...
- python 函数(实参与形参、传递参数)
函数 什么是函数?函数是带名字的代码块,用于完成具体的工作.写出一个函数后,就可以一直调用. 定义函数,函数的基本组成: 1.1 向函数传递参数 向函数中传递任意参数,这样打印出的结果就可以根据自己的 ...
随机推荐
- Android -- ContentProvider, 读取和保存系统 联系人
1. 示例代码 需要的读写联系人的权限 <uses-permission android:name="android.permission.WRITE_CONTACTS"/& ...
- js 冒泡型事件
- 日期插件My97DatePicker
因为项目中需要选中日期,所以就找到了My97DatePicker这个插件,用法非常的简单,但是因为各个公司的要求不同,我们公司使用js拼代码,然后渲染到页面上的,所以遇到了一点问题… 1.My97Da ...
- 关于java.lang.Exception:No tests found matching的一系列解决方法
问题描述: java.lang.Exception: No tests found matching [{ExactMatcher:fDisplayName=yahaa], {ExactMatcher ...
- spark streaming之 windowDuration、slideDuration、batchDuration
spark streaming 不同于sotm,是一种准实时处理系统.storm 中,把批处理看错是时间教程的实时处理.而在spark streaming中,则反过来,把实时处理看作为时间极小的批处理 ...
- mysql数据库优化课程---18、mysql服务器优化
mysql数据库优化课程---18.mysql服务器优化 一.总结 一句话总结: 1.四种字符集问题:字符集都设置为utf-82.slow log慢查询日志问题3.root密码丢失 1.mysql存在 ...
- C#/Java 程序员转GO/golang程序员笔记大全(day 01)
前言: 整理一下学习 Go 语言的笔记,作为一名老程序,学习一名新的开发语言自然不需要像小白那样从 HelloWorld 看起. 简单整理一下 Go 的一些差异处,希望对大家学习 go 有点帮助,不正 ...
- nyoj20——有向无环图深搜模板
吝啬的国度 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市, ...
- windows使用pip安装selenium报错问题
UnicodeDecodeError: 'ascii' codec can't decode byte 0xb9 in position 7: ordinal not in range(128) 这是 ...
- 应用性能管理工具PinPoint介绍
概述: 下面介绍一个开源的 APM (Application Performance Management/应用性能管理)工具 - Pinpoint.一个分布式事务跟踪系统的平台,思路基于google ...