Partial application 和 currying 在实际编程中的区别是什么?
一、Partial application 和 currying 在实际编程中的区别
currying描述的是函数变换的过程,把一个参数为X×Y×Z而结果为N类型的函数f变换成了一个参数为X,返回值为Y->(Z->N)类型的函数。currying不要求进行函数调用,只是对函数本身的操作,可以理解成在函数进行定义时所做的变换。
而partial application则是在函数调用时才起作用的(它本来就叫做partial function application,部分,函数,应用),可以理解为语言为函数调用机制加入的方便功能。就算没有currying,也可以在编程语言中做到partial application(只要可以在运行时构造闭包)。
1、它们都是高阶函数
2、它们都是把多元函数转换成更低元的函数
3、偏函数只返回一次接受剩余参数的函数,柯理化会追述到所有参数补齐才会真正执行
4、柯理化就是自动化的偏函数应用
延伸阅读:
二、偏函数(Partial Application)的实现过程
一起分析一下偏函数(Partial Application)的实现过程。
首先,偏函数也是一个高阶函数,其实现符合高阶函数的模型:
接受一个或多个函数作为输入输出一个函数它需要一个函数作为名列前茅个参数,并且返回值也是一个函数
function partial(fn){
return function restFn(){
// …
}
}
其次,偏函数创建时可以固定部分参数,也即除名列前茅个参数fn以外的参数,都是预置参数。
function partial(fn){
var args = [].slice.call(arguments,1)
return function restFn(){
// …
}
}
最后,接受剩余参数,并和预置参数整合,作为fn的参数执行应用。
function partial(fn){
var args = [].slice.call(arguments,1)
return function(){
var rest = [].slice.call(arguments)
return fn.apply(null, args.concat(rest))
}
}
对应的es6实现代码
const partial = (fn,…args)=>(…rest)=>fn.apply(null, args.concat(rest))

猜你喜欢LIKE
相关推荐HOT
更多>>
视频分类和行为识别有什么不同?
一、视频分类视频分类主要关注的是视频的整体内容或主题。这通常是通过提取视频的全局特征,然后使用机器学习模型进行分类实现的。例如,一个关...详情>>
2023-10-17 23:24:47
一个完整的软件项目开发过程中有哪些文档产出?
1. 需求文档需求分析报告:明确项目的目标、范围、约束和功能需求。功能规格说明:详细描述系统功能、性能需求和用户界面设计。2. 设计文档系统...详情>>
2023-10-17 22:22:39
什么是项目的目标?
项目的目标是什么项目的目标,从广义上讲,是指项目期望达到的预定的结果或效果。它是项目成功的标准,为项目的实施和管理提供了明确的指导和评...详情>>
2023-10-17 14:13:41
ITSS各级别之间有什么联系?
一、基础设施与应用ITSS的基础设施层是整个行业的基础,包括硬件设备、网络设施、数据存储等。这些基础设施为上层的应用提供了支撑,形成了庞大...详情>>
2023-10-17 10:32:55热门推荐
技术干货






