curryAdvanced
高级柯里化函数,支持占位符、参数重排和更灵活的参数收集。
函数签名
typescript
function curryAdvanced<T extends (...args: any[]) => any>(
fn: T,
arity?: number,
placeholder?: any
): any参数
| 参数名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
fn | Function | 是 | - | 要柯里化的函数 |
arity | number | 否 | fn.length | 函数的参数数量 |
placeholder | any | 否 | undefined | 占位符,用于跳过参数位置 |
返回值
| 类型 | 说明 |
|---|---|
Function | 柯里化后的函数 |
工作原理
- 初始化参数数组,使用占位符填充
- 返回柯里化函数:
- 接收新参数
- 遍历新参数,填充到参数数组中:
- 优先填充占位符位置
- 占位符位置都填满后,追加到末尾
- 检查是否已收集足够参数(非占位符参数 ≥ arity):
- 是:执行原函数
- 否:返回新的柯里化函数
- 递归直到收集足够参数
示例:
typescript
const _ = Symbol('placeholder')
const add = (a, b, c) => a + b + c
const curriedAdd = curryAdvanced(add, 3, _)
curriedAdd(_, 2, _)(1)(3) // 6
curriedAdd(1, _, 3)(2) // 6支持使用占位符跳过某些参数位置,提供更灵活的参数应用方式。