Currying 为实现多参函数提供了一个递归降解的实现思路 -- 把接受多个参数的函数变换成接受一个单一参数 (最初函数的第一个参数) 的函数, 并且返回接受余下的参数而且返回结果的新函数, 在某些编程语言中(如 Haskell), 是通过 Currying 技术支持多参函数这一语言特性的.
所以 Currying 原本是一门编译原理层面的技术, 用途是实现多参函数.
在《Mostly adequate guide》一书中, 这样总结了 Currying -- 只传递给函数一部分参数来调用它, 让它返回一个函数去处理剩下的参数.
- function currying(fn, ...args) {
- if (args.length>= fn.length) {
- return fn(...args);
- }
- return function(...args2) {
- return currying(fn, ...args, ...args2);
- };
- }
核心思想: 比较多次接受的参数总数与函数定义时的入参数量, 当接受参数的数量大于或等于被 Currying 函数的传入参数数量时, 就返回计算结果, 否则返回一个继续接受参数的函数.
Currying 的作用:
1. 参数复用: 固定参数, 根据 curring 后传入的参数不同实现函数的不同计算值
2. 延迟执行: 利用 curring 函数实现返回一个函数, 其执行结果是返回一个传入函数的执行结果
如:
- function currying (fn, ...args1) {
- return function (...args2) {
- return fn(...args1, ...args2)
- }
- }
总结: curring 的实质是利用闭包的原理来占存一部分参数, 并返回一个函数, 其执行结果是传入函数的执行结果.
来源: http://www.bubuko.com/infodetail-2956402.html