time-to-botec

Benchmark sampling in different programming languages
Log | Files | Refs | README

partial.js (1566B)


      1 var baseRest = require('./_baseRest'),
      2     createWrap = require('./_createWrap'),
      3     getHolder = require('./_getHolder'),
      4     replaceHolders = require('./_replaceHolders');
      5 
      6 /** Used to compose bitmasks for function metadata. */
      7 var WRAP_PARTIAL_FLAG = 32;
      8 
      9 /**
     10  * Creates a function that invokes `func` with `partials` prepended to the
     11  * arguments it receives. This method is like `_.bind` except it does **not**
     12  * alter the `this` binding.
     13  *
     14  * The `_.partial.placeholder` value, which defaults to `_` in monolithic
     15  * builds, may be used as a placeholder for partially applied arguments.
     16  *
     17  * **Note:** This method doesn't set the "length" property of partially
     18  * applied functions.
     19  *
     20  * @static
     21  * @memberOf _
     22  * @since 0.2.0
     23  * @category Function
     24  * @param {Function} func The function to partially apply arguments to.
     25  * @param {...*} [partials] The arguments to be partially applied.
     26  * @returns {Function} Returns the new partially applied function.
     27  * @example
     28  *
     29  * function greet(greeting, name) {
     30  *   return greeting + ' ' + name;
     31  * }
     32  *
     33  * var sayHelloTo = _.partial(greet, 'hello');
     34  * sayHelloTo('fred');
     35  * // => 'hello fred'
     36  *
     37  * // Partially applied with placeholders.
     38  * var greetFred = _.partial(greet, _, 'fred');
     39  * greetFred('hi');
     40  * // => 'hi fred'
     41  */
     42 var partial = baseRest(function(func, partials) {
     43   var holders = replaceHolders(partials, getHolder(partial));
     44   return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);
     45 });
     46 
     47 // Assign default placeholders.
     48 partial.placeholder = {};
     49 
     50 module.exports = partial;