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

    对于一个函数:

    function add(a,b,c){
        return a + b + c
    }

    我们希望实现一个效果,我们希望有另外一个函数curryingAdd,使得curryingAdd(1,2,3),curryingAdd(1,2)(3),curryingAdd(1)(2,3)和add(1,2,3)的效果是等价的,即实现参数个数的任意化。这便是函数柯里化。

    实现代码:

    function currying(fn,...args){
        if(fn.length <= args.length){  
        //fn.length返回的是fn函数定义的参数个数,即add函 
        //数的a,b,c三个参数,args.length是curring函数调用时传入的参数个数
            return fn(...args)
        }
        return function(...args1){
            return currying(fn,...args,...args1)
        }
    }
    function add(a,b,c){
        return a + b + c
    }
    add(1,2,3) // 6
    var curryingAdd = currying(add);
    curryingAdd(1)(2)(3) // 6
    curryingAdd(1,2)(3) // 6
    curryingAdd(1)(2,3) // 6

    箭头函数简化写法:

    var currying = (fn,...args) => (...args1) => {
            if(fn.length <= args.length){
                return fn(...args)
            }
            return currying(fn,...args,...args1)
    }
    function add(a,b,c){
        return a + b + c
    }
    //调用时最后多一个()
    currying(add)(1,2)(3)()// 6
  • 相关阅读:
    网络拓扑
    OSI 7层模型和TCP/IP 4层模型
    第一范式 第二范式 第三范式 BC范式 第四范式
    医院 信息科
    李纳斯•托瓦兹
    所谓绅士,就是做自己该做之事,而不是想做之事。
    活着
    开头词
    人际题目
    人际关系
  • 原文地址:https://www.cnblogs.com/AwenJS/p/12711866.html
Copyright © 2011-2022 走看看