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。此时在调用函数时,就不会使用传值参数,而是会把花括号中的部分包裹成一个匿名函数,以函数值的形式作为参数传递下去。这样做的结果就是使用起来跟内建的控制结构一样。

转载于:https://my.oschina.net/u/2561528/blog/2218923

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值