美文网首页
ramdajs源码学习--curryN

ramdajs源码学习--curryN

作者: 你才是哀木涕 | 来源:发表于2019-03-24 12:44 被阅读0次
    _cuuryN函数源码

    我在读这个代码的时候,还是花了一些时间的;但是彻底弄明白以后,发现核心思想其实很简单,只是ramda做了很多容错、占位符等处理,多了一些参数,看起来就不太容易理解。


    这个函数是用来给函数消元的(柯里化),比如 最简单的一个拼接字符串的例子


    _curryN函数接收3个参数

    length {Number} -- 参数个数(待消元个数)

    received {Array} --  参数数组

    fn{Function} -- 最终执行函数

    先把辅助部分抛开,只看关键部分,应该是这样的

    这样就很容易理解了,这个函数干2件事情

    1.判断length个参数,是否已经全部传入,是则执行方法,否则继续柯里化

    2.将已接收到的参数和当前新参数合并成新的参数数组

    详细解释一下

    该函数将已接收到的参数放入combined数组中,combinedIdx表示已放入的个数,如果combinedIdx === received.length 表示已经将之前的参数都添加到了新数组,在判断当前新参数,如果argsIdx === arguments.length表示已经将新的参数也放入了数组中。至此combined得到了一个包含当前最新所有参数的数组,再判断left(已消元的次数) === 0 如果是,执行最终方法,传入参数 否则 继续递归调用_curryN

    (看来自己想清楚到说清楚还是需要锻炼,总觉得自己没解释清楚。。)

    其他的一些,就是ramdajs的一些辅助功能了,比如判断参数是否是占位符 _isPlaceholder,

    还有_arity 不太清楚意义何在。

    如果上面的核心思想我解释清楚的话,这些辅助功能自己一看就明白了。

    掌握核心思想之后,稍加思考,就能得出一个更加'函数式'的函数

    欢迎评论交流~


    相关文章

      网友评论

          本文标题:ramdajs源码学习--curryN

          本文链接:https://www.haomeiwen.com/subject/abhclttx.html