scala的传名参数
Posted 丹江湖畔养蜂子的赵大爹
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了scala的传名参数相关的知识,希望对你有一定的参考价值。
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) //有效
以上是关于scala的传名参数的主要内容,如果未能解决你的问题,请参考以下文章