scala学习手记29 - 偏应用函数

调用函数可以说成是将函数应用于实参。如果传入所有的预期的参数,就完全应用了这个函数。如果只传入几个参数,就会得到一个偏应用函数。

偏应用函数是一个特殊的概念,在scala中它是使用val定义的,但是在使用时它却更像是一个函数。偏应用函数的定义更接近于python中有默认值的函数(scala实在是和python有太多相似的地方了)。

先来看一个例子:

import java.util.Date

def log(date: Date, message: String) {
  //... 
  println(date + "----" + message)
}
val date = new Date
log(date, "message1")
log(date, "message2")
log(date, "message3")

示例中定义了一个log函数,在log函数中需要传入两个参数date和message。在之后又多次调用log函数,调用时使用了相同的date和不同的message。很显然,这里多次使用相同的date会让人有些小小的不耐烦。所以scala就提供了一个方案让人打消掉这小小的不耐烦:将log函数偏应用到date上,可以避免每次使用都要调用它。

看一下是如何实现的:

val logWithDateBound = log(new Date, _: String)
logWithDateBound("message1")
logWithDateBound("message2")
logWithDateBound("message3")

在示例代码中先将一个值绑定到date参数上,然后用“_”使第二个参数未绑定,这样就构成了一个偏应用函数。然后这个偏应用函数被存到logWithDateBound这个引用里。随后就可以使用不同的message来调用这个新的函数了。

说到底这里还是定义了一个新的函数,不过在定义和使用上都比较自由罢了。说实话,目前我是觉得这个特性是有些华而不实的。这个特性的引入更像是在炒作一个旧有的概念,新瓶装旧酒总让人提不起兴致来。

看下教材上的解释:当创建偏应用函数时,Scala内部会创建一个新类,它有一个特殊的apply()方法。调用偏应用函数,实际上是调用这个apply方法。

##########

转载于:https://www.cnblogs.com/amunote/p/5721912.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值