Currying Javascript functions
Here is a code-snippet that gives you the ability to curry any given Javascript function:
Function.prototype.curry = function () {
var fn = this,
args = Array.prototype.slice.call(arguments, 0);
if (fn.length === args.length) {
return fn.apply(undefined, args);
}
return function (arg) {
return Function.prototype.curry.apply(fn, args.concat([arg]));
};
};
This allows you to do something like:
var add = function (x, y) { return x + y; };
var add2 = add.curry()(2);
add2(3); // equivalent to add(2, 3) == 5
This will also work for functions with more than 2 arguments, of course:
var f = function (a, b, c, d) { ... };
f(a, b, c, d) == f.curry()(a)(b)(c)(d) == f.curry(a, b)(c)(d);
Written by Bez Hermoso
Related protips
Have a fresh tip? Share with Coderwall community!
Post
Post a tip
Best
#Functional
Authors
Sponsored by #native_company# — Learn More
#native_title#
#native_desc#