zoukankan      html  css  js  c++  java
  • 函数柯里化浅解

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

    简单点来说,平常我们不同的函数,理论上可以加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.固定易变因素 

    十分感谢一只菜鸟攻城狮啊 的帮助。

  • 相关阅读:
    Java代码规范
    使用规则执行器替换IF条件判断
    设计模式六大设计原则
    MySQL学习笔记
    LintCode 550 · Top K Frequent Words II
    LeetCode 260. Single Number III
    LeetCode 162. Find Peak Element
    牛客_线段重合问题
    [福州大学2021春软件工程实践|S班]助教总结
    MacOS sublimetext 安装 packagecontrol 失败
  • 原文地址:https://www.cnblogs.com/zx-qd/p/10535205.html
Copyright © 2011-2022 走看看