【值传递和引用传递之外的第三种传值方式 - 传名参数】
引言
先看下Scala 的以下方法该如何调用那?
class Demo {val assertIsOpen = truedef test(isTrue: () => Boolean): Unit =if (assertIsOpen && !isTrue)throw new Exception("Error!")
}
调用测试
错误调用一
new Demo().test(3 > 2)
错误原因: 方法参数为 空参切返回值为 Boolean 的函数, 改调用 传递的是 Boolean 类型,类型错误. 等价于
new Demo().test(true)
错误调用二
new Demo().test( => 3 > 2) new Demo().test( _ => 3 > 2)
错误原因: 学费了,Scala 虽然有些地方可以省略 或 简写,但是也没那么随便. 第二行, 完全错误,传的是 一个参数返回 为 Boolean 的函数
正确调
val func = () => 3 > 2 new Demo().test(func)new Demo().test( () => 3 > 2)
点定义 函数变量传递, 或省略变量直接传.
那么Scala 能不能 即省略 () 或 => , 又能实现传递函数的方法那,答案是肯定的.
传名参数
传名参数是区别于
值传递
和引用传递
的 第三种传递参数的方法.修改以上方法的定义,以=>
开始, 而不是() =>
开始 1, 实现如下
class Demo{val assertionIsOpen = truedef test(isTrue : => Boolean) : Unit =if (assertionIsOpen && !isTrue)throw new Exception("Error!")
}
object Demo{def main(args: Array[String]): Unit = {new Demo().test( 3 > 2)}
}
使用以上定义就可以 省略 () =>
了
【值传递和引用传递之外的第三种传值方式 - 传名参数】相关推荐
- 多图证明,Java到底是值传递还是引用传递?
作者 | 王磊 来源 | Java中文社群(ID:javacn666) 转载请联系授权(微信ID:GG_Stone) 开篇先来曝答案,在 Java 语言中,本质只有值传递,而无引用传递,解释和证明详见 ...
- python函数参数的引用传递_Python初学者笔记(八):函数参数的值传递和引用传递...
函数参数的值传递和引用传递 像我们最熟悉的 C 语言,再写函数参数的同时需要规定函数参数到底是值传递还是引用传递.引用传递导致该参数在函数内的修改出了函数之外也会生效,值传递所有的修改都不会体现到函数 ...
- Java是值传递还是引用传递
Java是值传递还是引用传递 一.概述 在 Java 语言中,本质只有值传递,而无引用传递. 二.值类型和引用类型 值类型就是Java 中的 8 大基础数据类型: 整数型:byte.short.int ...
- Golang中的值传递和引用传递
一.前言 我在刚开始学习golang的时候,被值传递和引用传递困扰了一段时间,因为我之前是学习Java的,深受Java面向对象思想的影响,转成golang的时候就会想不通结构体等类型(看起来像是Jav ...
- Java中的值传递和引用传递
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 答:是值传递.Java 编程语言只有值传递参数.当一个对象实例作为 ...
- 面试官:Java 到底是值传递还是引用传递?
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:Intopass 来源:知乎,zhihu.com/q ...
- Java值传递与引用传递
Java面试题: 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 答案基本上是:值传递 说明:得出这种结论的前提必须是&qu ...
- python参数传递方法_深入理解python中函数传递参数是值传递还是引用传递
python 的 深入理解python中函数传递参数是值传递还是引用传递 目前网络上大部分博客的结论都是这样的: Python不允许程序员选择采用传值还是传 引用.Python参数传递采用的肯定是&q ...
- Stack Overflow上188万浏览量的提问:Java 到底是值传递还是引用传递?
来自:沉默王二 在逛 Stack Overflow 的时候,发现了一些访问量像阿尔卑斯山一样高的问题,比如说这个:Java 到底是值传递还是引用传递?访问量足足有 188万+,这不得了啊!说明有很多很 ...
最新文章
- Vue_VueRouter
- 正则表达式过滤HTML危险脚本
- php插件 pycharm_原来Pycharm中有这么多好用的插件|Pycharm精选插件
- 【最新】2020年4月学术会议变动汇总
- 几个支持生成Python代码的UML工具
- 01.计算机体系结构概述.md
- ces测试数据测试ces测试数据测试ces测试数据测试ces测试数据测试ces测试数据测试ces测试数据测试ces测试数据测试再次测试
- DataGridView很详细的用法
- 新功能:在负载均衡SLB控制台上查看DDoS安全防护阈值
- vue路由匹配实现包容性_多元化和包容性:停止说话,做作业
- Atitit 架构师的技术框架体系图 各种引擎列表 脚本引擎 groovy beanshel php nodejs rhino等 表达式引擎技术 Ognl/MVELl等 通讯, rest 命令解
- Intellij IDEA创建第一个项目的视频
- android ajax chrome,chrome浏览器ajax请求状态200,response为空的探索
- mybatis foreach标签的使用
- python设计模式之策略模式
- UIDataCollector的下载和使用
- 问题事件名称: APPCRASH(解决方法)
- JS实现全屏和退出全屏
- 音频编码方案之间音质比较(AAC,MP3,WMA等)
- C/C++编译器gcc的windows版本MinGW-w64安装教程
热门文章
- HDU 1011 Starship Troopers星河战队(树形dp)
- Python连接mysql,插入数据时不报错,但是没有插入进去
- Vue错误跳坑:npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! newbee@0.1.0 serve: `vue-cli-service serv
- 我们为什么要用版本控制
- 报错:axis2.AxisFault: Transport error: 401 Error: Unauthorized
- 快速利用工具编写博客
- 集合Set的用法总结-swif
- 入门数据挖掘(二手车交易价格预测案例)(二):特征工程
- 无线土壤水分传感器湿度传感器在农业领域中的应用
- 使用Chrome浏览器的搜索引擎,谷歌浏览器开启同步功能