科里化

Tue Jun 13 2023 · 1min

参考: https://zh.javascript.info/currying-partials

定义

将函数从可调用的f(a, b, c)转换为可调用的f(a)(b)(c)

function add(...args: number[]) {
  return {
    sum() {
      return args.reduce((a, b) => a + b, 0);
    },
  };
}

function currify(fn) {
  return function curried(...args: number[]) {
    if (args.length >= fn.length) {
      return fn.apply(this, args);
    } else {
      return function (...newArgs) {
        return curried.apply(this, args.concat(newArgs));
      };
    }
  };
}

const currifyAdd = currify(add);
// const res = currifyAdd(1)(2, 3).sum();
const res = currifyAdd(1)(2)(3).sum();
console.log('res', res);

通过示例代码可以发现,科里化需要被转化的函数有确定的参数个数,不然也不知道需不需要继续透传

排序
Leave a comment
点击切换主题
... 人来过