ut2
Version:
一个现代 JavaScript 实用工具库。[点击查看在线文档]。
32 lines (29 loc) • 1.09 kB
JavaScript
import { mathMax, arrayProtoSlice } from './internals/native.js';
import isUndefined from './isUndefined.js';
import toInteger from './toInteger.js';
var PLACEHOLDER = {
__ut2_curry_ph__: null
};
var curry = function (func, arity) {
arity = isUndefined(arity) ? func.length : mathMax(toInteger(arity), 0);
function wrap() {
var args = arrayProtoSlice.call(arguments);
var context = this;
function inner() {
var argsInner = arrayProtoSlice.call(arguments);
for (var i = 0; i < args.length; i++) {
args[i] = args[i] === PLACEHOLDER && argsInner.length > 0 ? argsInner.shift() : args[i];
}
args = args.concat(argsInner);
var realArgsLength = args.filter(function (arg) { return arg !== PLACEHOLDER; }).length;
if (realArgsLength >= arity) {
return func.apply(context, args);
}
return inner;
}
return inner();
}
return wrap;
};
curry.placeholder = curry._ = PLACEHOLDER;
export { curry as default };