柯里化(Curry)
- 柯里化可以让我们给一个函数传递较少的参数得到一个已经记住某些固定参数的新韩淑
- 这是一种对函数的“缓存”
- 让函数变得更灵活,让函数的粒度更小
- 可以把多元函数变成一元函数,可以组合使用函数产生强大函数
普通纯函数需要多次传递重复的值
// 普通纯函数
function chackAge(min, age) {return age >= min
}console.log(chackAge(18,20));
console.log(chackAge(18,24));
console.log(chackAge(22,24));
当一个函数有多个参数的时候先传递一部分参数调用它(这部分参数以后永远不会变)
然后在返回一个函数接受剩余的参数,返回结果
// 函数柯里化
function checkAge(min){return function(age){return age>=min}
}//ES6 写法
// let checkAge = min => (age => age >= min)let age18 = checkAge(18)
console.log(age18(20));
console.log(age18(24));
lodash中的curry基本使用
const _ = require('lodash')function getSum(a,b,c){return a + b + c
}const curried = _.curry(getSum)console.log(curried(1,2,3)); //6
console.log(curried(1)(2,3)); //6
console.log(curried(1)(2)(3)); //6
模拟实现lodash中curry函数
function curry(fun){return function curriedFn(...args){// 判断实参和形参的个数if(args.length<fun.length){return function(){return curriedFn(...args.concat(Array.from(arguments)))}}return fun(...args)}
}
//测试
function getSum(a,b,c){return a + b + c
}// const curried = _.curry(getSum)
const curried = curry(getSum)console.log(curried(1,2,3)); //6
console.log(curried(1)(2,3)); //6
console.log(curried(1)(2)(3)); //6
柯里化(Curry)相关推荐
- 打造属于自己的underscore系列(五)- 偏函数和函数柯里化
这一节的内容,主要针对javascript函数式编程的两个重要概念,偏函数(partial application) 和函数柯里化(curry)进行介绍.着重讲解underscore中对于偏函数应用的 ...
- JavaScript 专题之函数柯里化
JavaScript 专题系列第十三篇,讲解函数柯里化以及如何实现一个 curry 函数 定义 维基百科中对柯里化 (Currying) 的定义为: In mathematics and comput ...
- 什么是函数式编程,函数合并与柯里化又是什么意思?
函数式编程在耳边回响了多年,今天就来详细了解一下它吧. 函数式编程的主要特征是:函数是一等公民.它建议大家写纯函数.没有副作用的函数. 讨论完纯函数的内容,我们会看一下最重要的应用:函数的柯里化. 纯 ...
- Function Programming - 柯里化(curry)
看到一篇非常不错的文章,这里分享给大家:http://www.jianshu.com/p/fa3568087881. 首先,柯里化的定义:你可以只透过部分的参数呼叫一个function,它会回传一个f ...
- curry化 js_前端发动机从 bind 聊到 curry (柯里化)
前言 很长时间没有更新,一方面是工作比较忙,另一方面自己也处于一个学习的过程.接下来应该会逐渐恢复到稳定更新的状态,分享一些有趣的知识点以及我个人的思考.感兴趣的朋友可以关注下呀! 如果有不对的地方麻 ...
- JS函数curry(柯里化)
原文地址:http://blog.jobbole.com/77956/ 什么是柯里化? 柯里化是这样的一个转换过程,把接受多个参数的函数变换成接受一个单一参数(译注:最初函数的第一个参数)的函数,如果 ...
- 函数柯里化(curry)
我们依旧从需求入手,只有知道我们要干嘛,才能一步步引导我们堆砌出万丈高楼. 先看下面的代码: function add(x,y){return x+y}console.log(add(3,1))//4 ...
- java 科里化_关于柯里化(curry)
在实际使用的过程中对柯里化有了一些无法从书本上直接获得的感受. 在JAVA中函数不是头等公民,必须通过接口进行外观统一以后,才能通过实例作为载体进行处理逻辑的传递, 最容易理解的例子莫过于Strate ...
- 【译】理解JavaScript中的柯里化
译文开始 函数式编程是一种编程风格,这种编程风格就是试图将传递函数作为参数(即将作为回调函数)和返回一个函数,但没有函数副作用(函数副作用即会改变程序的状态). 有很多语言采用这种编程风格,其中包括J ...
- 深入理解函数式编程之柯里化
目录 柯里化定义 柯里化原因 柯里化前奏--需要固定数量参数 实现柯里化--期待固定数量参数 应用柯里化 流程剖析 柯里化定义 在数学和计算机科学中,柯里化是一种将使用多个参数的一个函数转化成一系列使 ...
最新文章
- java 反序列化 ysoserial exploit/JRMPListener 原理剖析
- Backbone React Requirejs 应用实战(一)——RequireJS管理React依赖
- rust和gta5哪个吃配置_选指数基金,像“今晚吃什么”一样容易
- 操作系统笔记(六)调度
- Clion 远程同步设置
- BTrace实现浅析
- C#中数据类型及其转换知识点汇总
- ASP.NET Core如何限制请求频率
- leetcode(189) 旋转数组
- 还需要更多东西吗?这里有一些要做的事情
- 拓展Revit的方式
- 如何去除Druid数据监控广告?
- 伯克利区块链课程:替代密码验证,比特币应用数字签名的进化之路
- HDU 2639 Bone Collector II (dp)
- Linux 安装NDK
- winscp如何连接安卓手机_使用WinSCP远程连接虚拟机
- 矩阵分析与应用-1.7-逆矩阵
- 【java】删除文件夹及文件夹中的所有文件
- C语言篇 - (1)初识C语言 - (1)什么是C语言
- IP地址、网络号、网关的区别