我理解的Curry化
来源:互联网 发布:mars java 编辑:程序博客网 时间:2024/05/17 22:07
柯理化一直是一个我觉得很抽象的东西,之前一直都半懂不懂,今天好好研究了一下,理解上稍稍有点清晰,赶紧来记下来,以后有了更好的理解再来更新。
1.函数式编程
函数是第一等公民
所谓”第一等公民”,指的是函数与其他数据类型一样,处于平等地位,可以赋值给其他变量,也可以作为参数,传入另一个函数,或者作为别的函数的返回值。
只用”表达式”,不用”语句”
“表达式”(expression)是一个单纯的运算过程,总是有返回值;”语句”(statement)是执行某种操作,没有返回值。函数式编程要求,只使用表达式,不使用语句。也就是说,每一步都是单纯的运算,而且都有返回值。
没有”副作用”
函数式编程强调没有”副作用”,意味着函数要保持独立,所有功能就是返回一个新的值,没有其他行为,尤其是不得修改外部变量的值。
即所谓的只要是同样的参数传入,返回的结果一定是相等的。
2.柯理化
什么是柯理化?
柯里化,又称为部分求值,是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回一个新的函数的技术,新函数接受余下参数并返回运算结果。
柯理化有什么作用?
- 动态创建一个新函数——当新函数是基于现有函数,并加上部分参数列表创建时。
- 延迟计算/运行,柯理化的复用——如果我们想对中间的某次返回函数进行复用或者其他处理。
- 参数复用——当发现正在调用同一个函数,并且绝大多数是相同的。
- 提前返回——兼容现代浏览器以及IE浏览器的事件添加方法。
应用场景示例
bind()方法的原生实现:
var obj={ name:"Joy"};function app(){ console.log(this.name);}if(typeof Function.prototype.bind === "undefined"){ Function.prototype.bind=function(context){ var arg=[].slice.call(arguments,1); var _that=this; return function(){ var _arg=arg.concat([].slice.apply(arguments)); return _that.apply(context,_arg); } };}var app2=app.bind(obj);app2();//Joy
在这个函数中,我们主要做了这几件事:
1.利用call/apply与arguments对象收集参数。
2.接收单一参数,将更多收集的参数交给返回函数处理。
0 0
- 我理解的Curry化
- curry化
- Javascript实现函数的curry化
- curry
- 深入理解scala的柯里化( currying or curry )以及其用处
- js 用闭包实现 curry化
- Scala函数值及Curry化
- 多参列表与Curry化
- 用 curry 过的闭包进行函数式编程
- 关于scala Curry和Partial Function的文章
- 我理解我的忧郁
- Scala学习笔记18【curry化函数代码示例】
- javascript curry
- Favoring Curry
- 我对模板化控件的理解
- 我理解的模块化与组件化
- 陈启申:我的理解
- 说说我的理解。
- 对退出app应用的一些理解和方式
- Codeforces-786C-Till I Collapse(二分剪枝)
- 编写代码模拟三次密码输入的场景
- kruskal模板
- 安徽大学第九届大学生程序设计竞赛 网络预选赛 D
- 我理解的Curry化
- 机器学习与数据挖掘之朴素贝叶斯法
- python解决pandas处理缺失值为空字符串
- Java中的泛型总结
- Android-->EventBus 3.0新版使用说明(及其使用方法)
- UVA10600-ACM Contest and Blackout
- P1030 求先序排列
- 转载——java内存分配和String类型的深度解析
- 安徽大学第九届大学生程序设计竞赛 网络预选赛 F