千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:郑州千锋IT培训  >  技术干货  >  Partial application 和 currying 在实际编程中的区别是什么?

Partial application 和 currying 在实际编程中的区别是什么?

来源:千锋教育
发布人:xqq
时间: 2023-10-19 10:06:16

一、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

职能管理与流程管理的区别是什么?

2023-10-19

端口测试用例怎么写?

2023-10-19

重大项目如何推进?

2023-10-19

最新文章NEW

为什么leetcode不支持php语言?

2023-10-19

golang的context和net.Conn怎么结合使用比较好?

2023-10-19

有什么免费的PDF翻译工具?11款免费翻译工具推荐?

2023-10-19

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>