柯里化curry
es6之前的写法
function curry(func){
var args = Array.prototype.slice.call(arguments, 1);
var that = this;
return function() {
var curryArgs = Array.from(arguments);
var totalArgs = args.concat(curryArgs);
if(totalArgs.length >= func.length){
return func.apply(null, totalArgs);
} else {
totalArgs.unshift(func);
return that.curryFn.apply(that, totalArgs);
}
}
}
es6之后的写法
function curry(fn) {
return function curried(...args) {
if (args.length >= fn.length) {
return fn.apply(this, args);
} else {
return function(...moreArgs) {
return curried.apply(this, args.concat(moreArgs));
};
}
};
}
简写
const curry = (fn,...args) =>
args.length >= fn.length
? fn(...args)
: (...moreArgs) => curry(fn, ...args, ...moreArgs);
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 Ruzenie
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果