Skip to content

Commit

Permalink
Merge pull request mout#243 from sirlancelot/patch-2
Browse files Browse the repository at this point in the history
Optimize partial.js placeholder detection
  • Loading branch information
roboshoes committed Mar 2, 2016
2 parents 86cb633 + f32f666 commit 4ff198a
Showing 1 changed file with 15 additions and 9 deletions.
24 changes: 15 additions & 9 deletions src/function/partial.js
Original file line number Diff line number Diff line change
@@ -1,22 +1,28 @@
define(['../array/slice'], function (slice) {
define(['../array/indexOf', '../array/slice', '../array/take'], function (indexOf, slice, take) {

var _ = {};

/**
* Creates a partially applied function.
*/
function partial(f) {
var as = slice(arguments, 1);
var has_ = indexOf(as, _) !== -1;

return function() {
var args = as.concat(slice(arguments));
for (var i = args.length; i--;) {
if (args[i] === partial._) {
args[i] = args.splice(-1)[0];
}
}
return f.apply(this, args);
var rest = slice(arguments);

// Don't waste time checking for placeholders if there aren't any.
var args = has_ ? take(as.length, function(i) {
var a = as[i];
return a === _ ? rest.shift() : a;
}) : as;

return f.apply(this, rest.length ? args.concat(rest) : args);
};
}

partial._ = {};
partial._ = _;

return partial;

Expand Down

0 comments on commit 4ff198a

Please sign in to comment.