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
みたいなことができる.