scala传名参数
传名参数
示例来源于programming in scala
先看一个例子:
scala> def myAssert(predicate: () => Boolean) = { | if (predicate()) println("true") | else println("false") | } myAssert: (predicate: () => Boolean)Unit scala> myAssert { | () => 5 > 3 | } true scala> myAssert { | 5 > 3 | } <console>:14: error: type mismatch; found : Boolean(true) required: () => Boolean 5 > 3
调用函数myAssert时,当直接传5 > 3给它时会报错,原因是因为这个函数的定义使用的是传值。也就是说会先将表达式5 > 3计算出结果,然后将结果传给函数myAssert。如果想要传递5 > 3这个表达式,就要使用传名参数。
传名参数如何使用?
scala> def myAssert(predicate: => Boolean) { | if (predicate) println("true") | else println("false") | } myAssert: (predicate: => Boolean)Unit scala> myAssert { | println("Hello") | 5 > 3 | } Hello true
也就是说,传名参数,适用于参数类型是无参函数的情况,并且使用时需要将圆括号去掉:predicate: => Boolean。此时在调用函数时,就不会使用传值参数,而是会把花括号中的部分包裹成一个匿名函数,以函数值的形式作为参数传递下去。这样做的结果就是使用起来跟内建的控制结构一样。
相关推荐
匆匆那些年 2020-10-15
TheBigBlue 2020-07-28
shenwenjie 2020-07-07
muhongdi 2020-07-07
waitwolf 2020-07-08
yunfenglee 2020-07-08
yunfenglee 2020-07-08
kekeromer 2020-07-08
匆匆那些年 2020-07-07
liqinglin0 2020-07-05
TheBigBlue 2020-07-05
kekeromer 2020-06-13
zhixingheyitian 2020-06-08
TheBigBlue 2020-06-06
liqinglin0 2020-06-01
liqinglin0 2020-06-01
yunfenglee 2020-05-30
MICKEYSTUDY 2020-05-28
muhongdi 2020-05-19