首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

进大厂之必会的函数柯里化(Currying)

深入了解函数柯里化

是一种处理函数的高级技术。它不仅在中使用,也在其他语言中使用。

套用是函数的一种转换,将函数从可调用的转换为可调用的。

不调用函数。它只是改变了它。

让我们先看一个例子,以便更好地理解我们正在讨论的内容,然后看实际应用程序。

我们将创建一个辅助函数,它执行对两个参数的。换句话说,对于两个参数的将其转换为一个以的方式运行的函数:

如您所见,实现很简单:它只是两个包装器。

的结果是一个包装函数。

当像那样调用时,参数被保存在词法环境中,并返回一个新的包装器函数。

然后用2作为参数调用这个包装器,并将调用传递给原始的。

更高级的套用实现,例如库中,返回一个允许函数被正常或部分调用的包装器:

为了理解这些好处,我们需要一个有价值的现实例子。

例如,我们有日志功能来格式化和输出信息。在实际的项目中,这样的函数有很多有用的特性,比如通过网络发送日志,这里我们只使用:

对其进行函数柯里化

日志正常工作后:

也可以使用 柯里化

现在我们可以很容易地为当前日志创建一个方便的函数:

现在是带有固定第一个参数的日志,换句话说就是“部分应用函数”或简称为“partial”。

我们可以更进一步,为当前调试日志创建一个方便的函数:

所以:

后我们没有丢失任何东西:仍然可以正常调用。

我们可以很容易地生成部分函数,比如今天的日志。

进阶的柯里化实现

如果您想了解更多细节,这里是我们可以在上面使用的多参数函数的“高级”实现。

很短:

案例

新的看起来可能很复杂,但实际上很容易理解。

调用的结果是这样的包装器:

当我们运行它时,有两个执行分支:

如果传入的与原始函数的定义相同或更多,则只需使用将调用传递给它。

否则,得到一个部分:我们还没有调用。相反,将返回另一个包装器,它将重新应用,同时提供以前的参数和新的参数。

然后,如果我们再次调用它,我们将得到一个新的部分(如果没有足够的参数),或者最终得到结果。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20210311A01ACF00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券