time-to-botec

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

curry.js (1644B)


      1 var createWrap = require('./_createWrap');
      2 
      3 /** Used to compose bitmasks for function metadata. */
      4 var WRAP_CURRY_FLAG = 8;
      5 
      6 /**
      7  * Creates a function that accepts arguments of `func` and either invokes
      8  * `func` returning its result, if at least `arity` number of arguments have
      9  * been provided, or returns a function that accepts the remaining `func`
     10  * arguments, and so on. The arity of `func` may be specified if `func.length`
     11  * is not sufficient.
     12  *
     13  * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,
     14  * may be used as a placeholder for provided arguments.
     15  *
     16  * **Note:** This method doesn't set the "length" property of curried functions.
     17  *
     18  * @static
     19  * @memberOf _
     20  * @since 2.0.0
     21  * @category Function
     22  * @param {Function} func The function to curry.
     23  * @param {number} [arity=func.length] The arity of `func`.
     24  * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     25  * @returns {Function} Returns the new curried function.
     26  * @example
     27  *
     28  * var abc = function(a, b, c) {
     29  *   return [a, b, c];
     30  * };
     31  *
     32  * var curried = _.curry(abc);
     33  *
     34  * curried(1)(2)(3);
     35  * // => [1, 2, 3]
     36  *
     37  * curried(1, 2)(3);
     38  * // => [1, 2, 3]
     39  *
     40  * curried(1, 2, 3);
     41  * // => [1, 2, 3]
     42  *
     43  * // Curried with placeholders.
     44  * curried(1)(_, 3)(2);
     45  * // => [1, 2, 3]
     46  */
     47 function curry(func, arity, guard) {
     48   arity = guard ? undefined : arity;
     49   var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
     50   result.placeholder = curry.placeholder;
     51   return result;
     52 }
     53 
     54 // Assign default placeholders.
     55 curry.placeholder = {};
     56 
     57 module.exports = curry;