標高+1m

Don't be rational

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

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

    _.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 = _.slice(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

みたいなことができる.