Chu*_*ckE 5 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
Run Code Online (Sandbox Code Playgroud)
非常方便,对吗?事情是,我希望能够反向进行咖喱,这意味着用随机值填充我的proc的最后一个参数.像这样:
p = proc{|x, y| x - y }.curry[1]
p.(4)
Run Code Online (Sandbox Code Playgroud)
我想要的结果是3.这会返回-3.
我认为没有直接的方法可以做到这一点,而且你所做的有点狡猾,可能有比反柯里化更好的解决方案来解决你的问题
为了达到预期的结果,你可以做的就是在你的过程周围包裹更多的过程:
p = proc{|x, y| x - y}
q = proc{|y, x| p[x, y]}
q.curry[1].(4)
Run Code Online (Sandbox Code Playgroud)
事实上,你可以以任何你想要的方式重新排列参数,但相信我,它很快就会变得混乱
| 归档时间: |
|
| 查看次数: |
196 次 |
| 最近记录: |