Ruby 1.9 内置的对柯里化的支持支持两种方法来处理带有任意数量参数的 proc:
my_proc = proc {|*x| x.max }
1)curry
没有参数:my_proc.curry
. 您将逗号分隔的参数传递给 curried proc,就像您传递给普通 proc 一样。如果参数的数量是任意的,这将无法实现正确的柯里化(如果某些参数不是 splat 则很有用)
2)curry
带参数:my_proc.curry(n)
这样,currying 被应用,就好像 proc 将带n
参数一样。例如:
my_proc.curry(3).call(2).call(5).call(1) #=> 5
那么,如何使用任意数量的参数实现柯里化呢?这意味着,如果n
没有给出?
我想到的一种方法是通过代理收集参数call
,然后解析proc
通过(如果使用/不使用参数method_missing
以外的任何方法,请使用收集的参数调用),但我仍在寻找其他方法实现它。call
call
proc
更新
正如 Andy H 所说,问题在于何时停止使用咖喱。call
就我的目的而言,如果在调用除此之外的任何方法或call
在没有参数的情况下调用任何方法时停止柯里化 / proc 评估,那将是可以的。