Skip to content

Instantly share code, notes, and snippets.

@bongofury
Last active December 14, 2015 16:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bongofury/5118266 to your computer and use it in GitHub Desktop.
Save bongofury/5118266 to your computer and use it in GitHub Desktop.
js partial application pattern
//simple partial application
//--------------------------
var partial = function() {
var fn = arguments[0];
var slice = Array.prototype.slice;
var args = slice.call(arguments, 1);
return function() {
return fn.apply(null, args.concat(slice.call(arguments, 0)));
};
};
var addMultiple = function() {
var sum = 0;
for (var i = 0; i<arguments.length; i++)
sum += arguments[i];
return sum;
}
var addSomething = partial(addMultiple, 1);
console.log(addSomething(10, 20));
//partial application (any w/ placeholder)
//----------------------------------------
var partialAny = (function () {
function partialAny(fn) {
var slice = Array.prototype.slice;
var args = slice.call(arguments, 1);
return function () {
var actualArgs = [];
var partial = slice.call(arguments, 0);
for (var i = 0; i < args.length; i++) {
actualArgs[i] = (args[i] === partialAny.placeholder) ? partial.shift() : args[i];
}
return fn.apply(null, actualArgs.concat(partial))
}
}
partialAny.placeholder = {};
return partialAny;
}());
function calcHex(a, b, c) {
return '#' + a + b + c;
}
var __ = partialAny.placeholder;
var setFirstValue = partialAny(calcHex, __, 'ff', 'aa');
console.log(setFirstValue('ca'));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment