Skip to content

函数柯里化

🕒 Published at:

在计算机科学中,柯里化(英语:Currying),又译为卡瑞化或加里化,是一种将使用多个参数的一个函数转换成一系列使用一个参数的函数的技术。

柯里化(Currying),又称部分求值(Partial Evaluation),是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。核心思想是把多参数传入的函数拆成单参数(或部分)函数,内部再返回调用下一个单参数(或部分)函数,依次处理剩余的参数。

js
// 传统写法
fn(1, 2, 3, 4);

// 柯里化
fn(1)(2)(3)(4);

假设这个函数是用于求和,那么就是把本来接收多个参数一次性求和的函数改成了接收单一参数逐个求和的函数。这样是不是容易理解了。

代码示例

js
  function curry(fn) {
    // 函数的length属性表示函数定义时所声明的形参个数(不包括剩余参数...和可选参数)
    var arity = fn.length;
    return function f1(...args) {
      if (args.length >= arity) {
        return fn(...args);
      } else {
        return function f2(...moreArgs) {
          const newArgs = [...args, ...moreArgs];
          return f1(...newArgs);
        }
      }
    };
  }
  
  // 原始函数
  function multiply(a, b, c) {
    return a + b + c;
  }
  // 柯里化后的函数
  var curriedMultiply = curry(multiply);
  // 使用柯里化后的函数
  var result = curriedMultiply(1)(2)(3);
  console.log(result);