假设我有一些功能:
function g(a,b,c){ return a + b + c }
我想把它变成它的“咖喱”形式(引用,因为它本身并不完全是咖喱):
function h(a,b,c){
switch(true){
case (a !== undefined && b !== undefined && c !== undefined):
return a + b + c
case (a !== undefined && b !== undefined && c === undefined):
return function(c){ return a + b + c }
case (a !== undefined && b == undefined && c === undefined ):
return function(b,c){
return (c === undefined) ? function(c){ return a + b + c } : a + b + c
}
default:
return h
}
}
上面的表单具有我想要的部分绑定行为:
h(1) -> h(b,c)
h(1,2) -> h(c)
h(1,2,3) -> 6
h() -> h(a,b,c)
现在我想将这个过程自动化到一些通用函数curry
中,这样给定任何非柯里化函数(可能还有它的参数数量),都会生成上述函数。但我不太确定如何实现它。
或者,如果可以自动创建以下表单,那也很有趣:
function f(a,b,c){
return function(a){ return function(b){ return function(c){ return a + b + c }}}
}
虽然绑定f
看起来像这样:
f(1)(2)(3) = 6
所以它非常笨拙且不习惯,但创建上述形式对我来说似乎更可行。
现在是否可以通过某个函数生成上述任何形式,如果可以,如何生成?