博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
函数柯里化浅解
阅读量:4677 次
发布时间:2019-06-09

本文共 1028 字,大约阅读时间需要 3 分钟。

首先,什么是函数柯里化?

简单点来说,平常我们不同的函数,理论上可以加n个参数像下图

这个简单的加法函数 传进去a,b,c,d 四个参数 理论上,极限来说,可以传n个。

而函数柯里化,就如下图

此时add(1,2,3,4)与 _add(1)(2)(3)(4) 的效果是一样的

正规点来说:在一个函数中首先填充几个参数(然后再返回一个新函数)的技术称为柯里化(Currying)。

通俗化来讲,函数柯里化就是把要传一个很多参数的函数,利用函数闭包的特性,在函数执行后没有立即销毁参数,而是等待下一个参数的传入,这这里就是重新return了一个函数

正如上面所说返回了一个新函数。最近有看见一个新的,我觉得还不错,有的人说不咋地先拿出来吧

柯里化通常也称部分求值,其含义是给函数分步传递参数,每次传递参数后部分应用参数,并返回一个更具体的函数接受剩下的参数,这中间可嵌套多层这样的接受部分参数函数,直至返回最后结果。

函数柯里化在接受到n个参数后会在函数内部进行长度检验,直到不匹配了,进行一次输出,整个传参的过程中,最终的函数运算只进行一次。

话不多说先上图。

我们来看第38行的getNewArray。执行这个函数,就上去了第34行_getNewArray ,此时把_map传入到了Curry函数里  ,也就是说直接把_map方法传到了Curry函数里

我们来打印一下

可以看出是把整个函数传入,进行条件判断,此时重定向函数.因为argument没有数组里的方法。用call()函数重新定向

然后把_args,args合并成一个,进行逻辑判断,发现长度小于artiy,进行二次传值,这个流程走完了,再把function(item)传入

此时我们定义好的数组都是在第二次传入curry()函数 此时参数收集完毕,执行函数func,而此时的func指的是我们二次传入的

function(item) 最后一次执行,返回结果。

再来说说柯里化的好处吧!

 特点:1.提高了代码的合理性,更重的它突出一种思想---降低适用范围,提高针对性。

     2.对于一个已有函数,对其约定好其中的某些参数输入,然后生成一个更有好的、更符合业务逻辑的函数。

 好处:1.提高针对性

    2.延迟执行(只有在最后一次才执行)

    3.固定易变因素 

 

十分感谢 的帮助。

转载于:https://www.cnblogs.com/zx-qd/p/10535205.html

你可能感兴趣的文章
SWMM[Storm Water Management Model]模型代码编译调试环境设置
查看>>
s11 day Linux 和nginx 部署
查看>>
程序猿的爱情-2012-01-22
查看>>
CentOS7.2 安装iptables
查看>>
网络是怎样连接的—1.浏览器生成消息
查看>>
codevs1430 素数判定
查看>>
2017年6月2号课堂笔记
查看>>
github
查看>>
poj1015【DP.......无奈了】
查看>>
C#性能优化的一些技巧
查看>>
PAT 甲级 1024 Palindromic Number
查看>>
信息安全经典书籍
查看>>
ios坐标位置转换
查看>>
Java多线程—JUC原子类
查看>>
C#中常用到的时间函数(天数差、星期几等)
查看>>
Unity 3D物体的点击事件响应以及NGUI坐标和世界坐标的互相转换
查看>>
如何理解一台服务器可以绑定多个ip,一个ip可以绑定多个域名
查看>>
springmvc 传递和接收数组参数
查看>>
Duplicate files copied in APK META-INF/DEPENDENCIES
查看>>
(转译)用FFmpeg和SDL写播放器--08软件缩放
查看>>