什么是函数柯里化?如何实现函数柯里化?代码举例讲解

函数柯里化(Currying)是将一个多参数的函数转换成一系列单参数的函数的技术。

举个例子,普通的多参数函数如:

int add(int a, int b) {
    return a + b; 
}

转换为柯里化版本后变为:

int add(int a) { 
    return (int b) -> {
        return a + b; 
    };
}

现在 add() 变为接受一个参数并返回另一个函数的函数。所以我们可以这样调用:

int add5 = add(5); 
int result = add5.invoke(10); // 结果为 15

我们将一个二元函数拆分为了两个步骤:

  1. add(5) 返回一个 adds5 函数
  2. 调用 adds5(10) 得到最终结果
    柯里化的主要目的是部分应用函数。我们可以针对某些已知参数固定住,得到一个新的函数来应用剩余的参数。

实现柯里化的关键在于使用闭包包裹函数与参数,返回一个新的函数。我们以一个简单的 add 函数为例进行演示:
普通版本:

int add(int a, int b) {
    return a + b;
}

柯里化版本:

int add(int a) {
    return (int b) -> {
        return a + b; 
    }; 
}

add() 函数现在变为返回一个函数的函数。我们可以这样调用:

int add5 = add(5);  
int result = add5.invoke(10); // 15

柯里化带来的主要好处是:

  1. 部分应用:我们可以提前固定一部分参数,得到一个新的函数。
  2. 提高复用性:柯里化函数更加灵活,更容易组合和复用。
  3. 延迟计算:不需要立即计算最终结果,可以等到真正需要结果的时候计算。