Edited at

JavaScriptの可変長引数を扱いやすく

More than 5 years have passed since last update.

_.optarg = function (n, f) {

return function (/* & arguments */) {
var required = Array.prototype.slice.call(arguments, 0, n);
var optional = Array.prototype.slice.call(arguments, n);
required.push(optional);
return _.apply(f, required);
};
};

これで

var f = function () {

var a = arguments[0];
var b = arguments[1];
var rest = Array.prototype.slice.call(arguments, 2);
//...
};

みたいなコードを

var g = _.optarg(2, function (a, b, rest) {

//...
});

みたいに書ける。

_.bin_multi = function (binary_f) {

return _.optarg(2, function (x, y, zs) {
return _.foldl(zs, function (acc, a) {
return binary_f(acc, a);
}, binary_f(x, y));
});
};

これで、

var add = _.bin_multi(function (a, b) {

return a + b;
});

add(1,2,3,4,5,6,7,8,9,10); //=>55

みたいなことができる.

https://github.com/ympbyc/underscore-fix