scala如果你想实现像if ,while等类似的控制结构,根本没有值要传入花括号{}直接的代码里。要怎么实现。

比如说,我们要实现一个断言的控制结构,myAssert(), myAssert函数参考自带参数和一个标示变量,如果标示位为false,则什么都不做,如果为true则进行正常判断。

下面是一种合理的实现:

 val assertionEnable = true def myAssert( predicate: () => Boolean) = if(assertionEnable && ! predicate()) throw new AssertionError//myAssert函数的定义是合法的,也实现了这个功能,但是使用者的代码比较难看,myAssert( () => 5>3)
//省略函数字面量的参数列表()和 =>之后,就比较好了。
//    myAssert(   5>3)  //不会有效,因为缺少 () =>

省略函数字面量的参数列表()和 =>之后,就比较好了,但是会报编译错误。

scala的传名参数可以实现我们的愿望,传名参数的定义:要开始于=> 而不是 () => ;这样就可以实现我们的

需求。定义了传名参数的函数就是传名函数。

  def byNameAssert( predicate: => Boolean) = if(assertionEnable && ! predicate) throw new AssertionError
byNameAssert(5>3)  //有效

转载于:https://www.cnblogs.com/honeybee/p/5302643.html

scala的传名参数相关推荐

  1. scala的传名参数和传值参数

    传名参数 传值参数 因为Scala建议如果函数的参数只有一个,可以考虑使用{}代替(),因此test和test1的调用都是{},又因为test的参数是传名参数函数,因此传入的参数是不会被执行的,而te ...

  2. Scala学习笔记——传名参数和传值参数

    Scala传名参数和传值参数 文章目录 `Scala`传名参数和传值参数 `1.` 定义 `2.` 两者的比较 `3.` 自定义`while`循环 1. 定义 Scala的解释器在解析函数参数(fun ...

  3. Scala 传名参数、注解

    传名参数 传名参数仅在使用时求值.在类型之前添加=>,即可令参数为传名参数. 定义传名参数 def ggg(kkk: => Int) = kkk * 999 传名参数的优势在于,如果函数体 ...

  4. Scala 传名参数和传值参数

    Scala 传名参数和传值参数 传名参数 call-by-name 传值参数 call-by-value 在Scala中,当参数通过传值调用函数时,它会在调用函数之前计算一次传入的表达式或参数值.但是 ...

  5. scala控制抽象之传名参数(名调用)

    我们在用scala定义函数时,一般参数都是各种类型的值,这是常见的值调用 但偶尔也有需要把代码块作为参数传入的情况(名调用) 匿名函数经常可以作为函数的参数传入,非匿名函数也行(函数作为返回值返回就更 ...

  6. 【值传递和引用传递之外的第三种传值方式 - 传名参数】

    引言 先看下Scala 的以下方法该如何调用那? class Demo {val assertIsOpen = truedef test(isTrue: () => Boolean): Unit ...

  7. Scala传名参数(By-Name)

    1.=> 在了解Scala的By-Name参数之前,先了解下"=>"在Scala中有几种用法: 1.对于值,"=>"相当于lambda表达式. ...

  8. scala 柯里化+传名参数+递归 实现while关键字功能

    目录 代码实现 解读 代码实现 object Lambda {def main(args: Array[String]): Unit = {def myWhile(condition: => B ...

  9. scala的传值参数和传名参数

    object ScalaDemo extends App{var n = 10def count:Int = {n -= 1n}def invokeByName(x : => Int):Unit ...

最新文章

  1. uniapp自定义顶部导航组件
  2. MyEclipse10安装SVN插件的几种方法
  3. 双向绑定v-bind
  4. 基于注解风格的Spring-MVC的拦截器
  5. NVIDIA Tesla K40C 的各项性能参数
  6. 易用性软件测试用例,易用性、界面测试用例
  7. 高并发大流量,大麦抢票的技术涅槃之路
  8. 响应式美容美发形象设计艺术教育学校网站织梦模板源码
  9. 数据结构之队列的应用-超好玩的汽车加油站模拟器(C语言)
  10. 如何编辑styleGAN生成的图像的属性
  11. C++ Boost库分类总结
  12. noip2018翻车记
  13. 网络安全等级保护行业政策汇总
  14. Disconnected:No supported authentication methods available
  15. python怎么取共轭_python print出共轭复数的方法详解
  16. 区块链各种共识机制对比与分析
  17. ERP简单介绍(转)
  18. DOS下常用BAT(cmd)命令
  19. Tensorflow学习笔记(六)均方误差损失函数,MSE
  20. java程序在运行时,总是出现冲突的错误的解决办法。

热门文章

  1. MVC layout 命名空间引用问题
  2. 百度搜索,你画了好大一张饼,你还打算欺骗多少人呢?有图为证
  3. start for graduate studies career path
  4. just have a view of the open source project i contributed!!!
  5. 和身体和谐相处的经验
  6. [51nod]1229 序列求和 V2(数学+拉格朗日差值)
  7. ES6相关特性的整理(变量数据结构)
  8. String比较? 用==判断两个字符串,有时为true有时为false
  9. BZOJ4943 洛谷3823 UOJ315:[NOI2017]蚯蚓排队——题解
  10. 免费OA系统品牌有那些?