美文网首页
什么是函数柯里化

什么是函数柯里化

作者: 晚饭总吃撑 | 来源:发表于2021-08-25 15:04 被阅读0次

    今天看了一个关于函数式编程的文档很有意思,里面提到了函数柯里化,研究了一下,
    函数柯里化的定义:是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。

    通过上面的定义可以看出,柯里化是一个函数返回另一个函数,这是一个典型的闭包,它封装了一部分不变的内容,然后去处理其他可变的数据

    例如我们在使用ajax的时候url是不变的,但是传递的参数不同将返回不同的数据,那么我们就可以把url封装到一个函数里然后返回一个带参数的函数,通过返回的函数去处理不同参数的情况

    function requestCurry(url){
        return function(params){
            return new Promise((resolve,reject)=>{
                axios({
                    method:"post",
                    url:url,
                    data:{
                        ...params
                    }
                }).then(res=>{
                    resolve(res)
                }).catch(err=>{
                    reject(err)
                })
            })
        }
    }
    
    const userRequest = requestCurry("http://192.168.0.0.1/user")
    //请求参数code为112
    userRequest({
        code:112
    }).then(res=>{
        //请求成功
        console.log(res)
    })
    //请求参数code为114
    userRequest({
        code:114
    }).then(res=>{
        //请求成功
        console.log(res)
    })
    

    上面的两个请求参数不同,但是请求的地址url是固定不变的。这就是柯里化,将不变的参数通过闭包的形式封装起来,然后去处理可变的参数
    lodash中有一个柯里化方法curry。举个官网的例子:

    var abc = function(a, b, c) {
      return [a, b, c];
    };
    var curried = _.curry(abc);
    curried(1)(2)(3);
    // => [1, 2, 3]
    curried(1, 2)(3);
    // => [1, 2, 3]
    curried(1, 2, 3);
    // => [1, 2, 3]
    

    具体用法官网说明很清楚我就不再赘述了。

    相关文章

      网友评论

          本文标题:什么是函数柯里化

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