5

关于 Ruby 1.9.x 中的柯里化,我在某些地方一直在使用它,并且可以翻译为基本上支持 proc 参数的默认参数:

p = proc {|x, y, z|x + y + z}
p.curry[1] #=> returns a lambda
p.curry[1, 2] #=> returns a lambda
p.curry[1, 2, 3] #=> 6
p2 = p.curry[1, 2]
p2.(2) #=> 5
p2.(4) #=> 7

很方便,对吧?问题是,我希望能够反向 curry,这意味着,用随机值填充我的 proc 的最后一个参数。像这样:

p = proc{|x, y| x - y }.curry[1]
p.(4)

我想要的结果是 3。这将返回 -3。

4

1 回答 1

1

我认为没有直接的方法可以做到这一点,而且您正在做的事情有点狡猾,对于您的问题,可能有比反套路更好的解决方案

你可以做些什么来达到预期的结果是在你的 procs 周围包裹更多的 procs:

p = proc{|x, y| x - y}
q = proc{|y, x| p[x, y]}
q.curry[1].(4)

事实上,你可以以任何你想要的方式重新排序参数,但相信我它很快就会变得混乱

于 2012-11-05T14:33:59.160 回答