forked from lodash/lodash
-
Notifications
You must be signed in to change notification settings - Fork 0
/
curry.js
53 lines (49 loc) · 1.46 KB
/
curry.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import createWrap from './.internal/createWrap.js'
/** Used to compose bitmasks for function metadata. */
const WRAP_CURRY_FLAG = 8
/**
* Creates a function that accepts arguments of `func` and either invokes
* `func` returning its result, if at least `arity` number of arguments have
* been provided, or returns a function that accepts the remaining `func`
* arguments, and so on. The arity of `func` may be specified if `func.length`
* is not sufficient.
*
* The `curry.placeholder` value, which defaults to `_` in monolithic builds,
* may be used as a placeholder for provided arguments.
*
* **Note:** This method doesn't set the "length" property of curried functions.
*
* @since 2.0.0
* @category Function
* @param {Function} func The function to curry.
* @param {number} [arity=func.length] The arity of `func`.
* @returns {Function} Returns the new curried function.
* @example
*
* const abc = function(a, b, c) {
* return [a, b, c]
* }
*
* const curried = curry(abc)
*
* curried(1)(2)(3)
* // => [1, 2, 3]
*
* curried(1, 2)(3)
* // => [1, 2, 3]
*
* curried(1, 2, 3)
* // => [1, 2, 3]
*
* // Curried with placeholders.
* curried(1)(_, 3)(2)
* // => [1, 2, 3]
*/
function curry(func, arity) {
const result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity)
result.placeholder = curry.placeholder
return result
}
// Assign default placeholders.
curry.placeholder = {}
export default curry