在进行函数式编程时,如果你有一个curry
函数,那么编写闭包的原因是什么?
封闭
add = additive => value => value + additive
咖喱
add = curry((additive, value) => value + additive)
这是咖喱功能:
curry = func => (...args) => (
args.length >= func.length
? func(...args)
: (...moreArgs) => curry(func)(...args.concat(moreArgs))
)
这个递归版本都可以使用add(1, 2)
和add(1)(2)
。
答案 0 :(得分:1)
curry
是一种即时创建闭包的好方法,但在大多数情况下,编写闭包很简单,并且在必要时编写uncurry
:
您可能没有curry
可用,写一篇文章会比较麻烦。
始终将您的函数包装在curry
中非常麻烦。它创造了很多间接性和魔力,对于包括你自己在内的其他程序员来说可能并不明显。
如果需要进行微优化,curry会在代码周围添加更多函数包装器和逻辑,最终在数万次调用后显着减速。