Java中,什么是偏应用函数?它在编程中起什么作用?

"分部应用"一个函数是一项特别有趣的技术,在函数调用之前,我们可以预先传入一些函数。实际上,偏应用函数返回了一个含有预处理参数的新函数,以便后期可以调用。今天我们就来学习一下吧。

这类代理函数--代理的是另外一个函数,并且在执行的时候会调用所代理的函数--这就是我们上一节所使用的在函数调用时"绑定"特定上下文的技术。这里只是把相同的技术用在不同的地方而已。这种在一个函数中首先填充几个参数(然后再返回一个新函数)的技术称之为柯里化(currying)。像往常一样,示例才是最好的解释。但在我们研究如何实现柯里化之前,我们先看一下如何使用它。

假设我们想把一个字符串分隔成CSV(逗号分隔),并忽略多余的空格,我们可以很容易通过一个正则表达式,使用String的split()方法做到这一点:varelements="va11,val2,val3".split(/,\s*/);注意:如果对正则表达式生疏了,也没有关系。该正则表达式只是匹配一个逗号且逗号后跟随任意个数的空格而已但是,记住并编写正则表达式是一项乏味的事情。

这种技术是另外一个利用闭包记住状态的很好的例子。在本例中,我们要记住新增加的函数(这里的this参数不会存在于任何闭包中,因为每个函数调用的时候都有自己的this)以及预填充参数,并将它们转移到新创建的函数中。该新函数将有预填充的参数以及刚传入的新参数。其结果就是,这样的方法可以让我们预先传入一些参数,然后返回给我们一个新的简单函数供我们使用。

虽然这种风格的分布函数非常有用,但我们可以做得更好。如果我们给特定函数传递遗漏的参数,而不是从参数列表一开始就传,该如何做呢?这种风格的分部函数的实现,在其他语言中已经有实现了。但OliverSteele是首批在Functional.js库中实现它的人如下代码清单,展示了一个可能的实现(并且也是可以让代码清单1能使用的实现)。代码清单3 一个更复杂的"分部"函数

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20181001A18ICZ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券