JavaScript
Underscore.js

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