Ruby Reverse Currying:这可能吗?

时间:2012-11-05 14:13:32

标签: ruby functional-programming currying

关于Ruby 1.9.x中的currying,我一直在某些地方使用它,并且可以像基本上支持默认参数一样转换为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

非常方便,对吗?事情是,我希望能够反向进行咖喱,这意味着用随机值填充我的proc的最后一个参数。像这样:

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

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

1 个答案:

答案 0 :(得分:1)

我认为没有直接的方法可以做到这一点,你正在做的事情有点狡猾,可能有更好的解决方案来解决你的问题而不是反向讨论

你可以做些什么来达到预期的结果是在你的过程中包含更多的过程:

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

事实上你可以按照自己想要的方式对论点进行重新排序,但相信我会很快弄乱非常