实现一个函数 curry(fn),对函数进行柯里化

· 约 3 分钟读完 · 第 7 / 125 章

推荐答案

本题详细解读

什么是柯里化?

柯里化(Currying)是一种将多参数函数转换为一系列单参数函数的技术。通过柯里化,可以将一个接受多个参数的函数转换为一个接受单一参数的函数,并且返回接受余下参数的新函数,直到所有参数都被收集完毕,最终返回结果。

实现思路

  1. 参数收集:我们需要一个机制来收集传递给函数的参数,直到收集到的参数数量达到原函数的参数数量。
  2. 递归调用:如果收集到的参数数量不足,我们返回一个新的函数,继续收集剩余的参数。
  3. 执行原函数:当收集到的参数数量足够时,调用原函数并返回结果。

代码解析

  • curry(fn):这是柯里化的入口函数,接受一个函数 fn 作为参数。
  • curried(...args):这是柯里化后的函数,接受任意数量的参数 args。
    • 如果 args 的长度大于或等于 fn 的参数数量(fn.length),则直接调用 fn 并返回结果。
    • 否则,返回一个新的函数,继续收集剩余的参数,并将已收集的参数与新参数合并后递归调用 curried。

示例解析

  • curriedAdd(1)(2)(3):首先收集 1,然后收集 2,最后收集 3,当参数数量达到 add 函数的参数数量时,调用 add(1, 2, 3) 并返回结果 6。
  • curriedAdd(1, 2)(3):首先收集 1 和 2,然后收集 3,调用 add(1, 2, 3) 并返回结果 6。
  • curriedAdd(1)(2, 3):首先收集 1,然后收集 2 和 3,调用 add(1, 2, 3) 并返回结果 6。

通过这种方式,柯里化函数可以灵活地处理不同数量的参数,并且可以逐步收集参数直到满足原函数的需求。