柯里化(Currying)
柯里化(Currying)是一种函数式编程技术,它将一个多参数的函数转换为一系列单参数函数的嵌套调用。具体来说,柯里化可以将一个接受多个参数的函数 f(x, y, z) 转换成一个接受单个参数的函数 g(x),其中 g(x) 返回一个接受单个参数的函数 h(y),h(y) 返回一个接受单个参数的函数 i(z),最终 i(z) 返回 f(x, y, z) 的结果。
通过柯里化,我们可以将一个多参数的函数变成一系列单参数函数的组合,这样可以更方便地组合复杂的函数,也可以更容易地进行函数复用。此外,柯里化还可以帮助我们实现函数的部分应用,即将一个多参数函数的一部分参数固定下来,得到一个新的单参数函数。
1 | function add(x, y, z) { |
在上述代码中,我们首先定义了一个接受三个参数的函数 add(x, y, z),然后定义了一个通用的柯里化函数 curry(fn),它接受一个函数作为参数,返回一个新的柯里化后的函数。
在 curry() 函数内部,我们使用了递归的方式来实现柯里化。如果函数的参数个数已经达到了原函数的参数个数,就直接调用原函数并返回结果;否则,返回一个新的函数,它接受更多的参数,并将之前的参数和新的参数合并起来,继续等待下一次调用。
然后,我们使用 curry() 函数将 add() 函数进行柯里化,并得到一个新的柯里化后的函数 curriedAdd()。接着,我们使用 curriedAdd(5) 得到一个新的函数 add5(),它可以将 5 与其它两个参数相加。最后,我们使用 add5(6) 得到一个新的函数 add5and6(),它可以将 5、6 和一个额外的参数相加,并返回结果。
在这个例子中,我们展示了柯里化的一个重要特性:部分应用。通过柯里化,我们可以将原本接受多个参数的函数转换为一系列接受单个参数的函数,然后将其中一部分参数固定下来,得到一个新的函数。这种技术可以帮助我们更方便地进行函数复用和组合。