1 | var indexOf = require('../array/indexOf');
|
2 | var slice = require('../array/slice');
|
3 | var take = require('../array/take');
|
4 |
|
5 | var _ = {};
|
6 |
|
7 | |
8 |
|
9 |
|
10 | function partial(f) {
|
11 | var as = slice(arguments, 1);
|
12 | var has_ = indexOf(as, _) !== -1;
|
13 |
|
14 | return function() {
|
15 | var rest = slice(arguments);
|
16 |
|
17 |
|
18 | var args = has_ ? take(as.length, function(i) {
|
19 | var a = as[i];
|
20 | return a === _ ? rest.shift() : a;
|
21 | }) : as;
|
22 |
|
23 | return f.apply(this, rest.length ? args.concat(rest) : args);
|
24 | };
|
25 | }
|
26 |
|
27 | partial._ = _;
|
28 |
|
29 | module.exports = partial;
|
30 |
|
31 |
|