关于“柯里化”的小笔记
in Note with 2 comments
关于“柯里化”的小笔记
in Note with 2 comments

真的是小笔记···真的··真·

在计算机科学中,柯里化(英语:Currying),又译为卡瑞化或加里化,是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。(摘自wiki)

下面是我实战柯里化的Demo例子,语言是JavaScript。

一个参数的情况下:

例子:

function a(n){
    console.log(n);
}

执行:

a(123);

这,没什么好说的,函数带参然后打印参数,结果返回:

123

两个参数的情况下:

例子:

function b(n){
    console.log(n);
    return function c(m){
        return n*n + m*m;
    }
}

在一个参数的情况下,执行:

b(1);

打印参数,返回里面的c()函数,结果返回:

1
function c(m){
        return n*n + m*m;
}

在两个参数的情况下,执行:

b(1)(2);

打印第一个参数,然后将第二个参数传入给c(),执行计算,结果返回:

1
5

函数之间回调的柯里化

例子:

function c(n1) {
    const m1 = 2;
    console.log(n1);
    return (callback) => {
        return callback && callback(m1);
    }
}

function b(n2) {
    const m2 = 3;
    console.log(n2);
    return (callback) => {
        return callback && callback(m2);
    }
}

function d(n3){
    console.log(n3);
}

在一个参数的情况下,执行:

c(123);

结果返回:

123
(callback) => {
        return callback && callback(m);
    }

在一个参数和一个函数的情况下,执行:

c(123)(b);

结果返回:

123
2
(callback) => {
        return callback && callback(m2);
    }

在一个参数和一个函数的情况下,执行:

c(123)(b)(d);

结果:

123
2
3

不得不说“柯里化”可以更好地理顺闭包的思想。

/逃

Responses
  1. co

    赞一个!!

    Reply
    1. @co

      感谢指导!

      Reply