👉 curry
在计算机科学中,柯里化(英语:Currying),又译为卡瑞化或加里化,是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。这个技术由克里斯托弗·斯特雷奇以逻辑学家哈斯凯尔·加里命名的,尽管它是 Moses Schönfinkel 和戈特洛布·弗雷格发明的。
柯里化是将一个接受多个参数的函数分解成一系列函数,每个函数只接受一个参数。
例如:将 f(a,b,c)
变换为 f(a)(b)(c)
。
✍️ 实现
function curry(func) {
return function curried(...args) {
// 如果参数的数量(args.length)大于或等于原函数中定义的参数数量(func.length),
// 则直接使用 func.apply 将参数传递。
if (args.length >= func.length) {
return func.apply(this, args);
}
// 否则,我们只得到一部分参数,此时还未调用 func,
// 则返回一个新的匿名函数,重新柯里化,提供之前的参数(args)和当前匿名函数参数(args2)。
return function(...args2) {
return curried.apply(this, args.concat(args2));
};
};
}
📌 测试
function sum(a, b, c) {
return a + b + c;
}
const currySum = curry(sum);
currySum(1, 2, 3); // 6 - 未柯里
currySum(1)(2)(3); // 6 - 完全柯里
currySum(1)(2, 3); // 6 - 第一个参数柯里