2012-11-05 42 views
5

用Ruby 1.9.x的關於鑽營,我一直在使用它在一些地方,並且可以轉換基本一樣支持默認參數的PROC參數:Ruby反向Currying:這可能嗎?

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 

非常方便的,對不對?事情是,我希望能夠逆向咖喱,這意味着,我的過程的最後一個參數填充隨機值。像這樣:

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

我想要的結果是3.這返回-3。

回答

1

我覺得有這樣做的沒有直接的方法和你正在做的是有些冒險,有可能是你的問題更好的解決方案比背討好

,你可以做,以達到期望的結果是什麼包裝在你的特效更多特效:

p = proc{|x, y| x - y} 
q = proc{|y, x| p[x, y]} 
q.curry[1].(4) 
其實你可以重新排序參數,你想要的任何方式,但

相信我,它就會變得混亂非常迅速

+0

赫姆,看起來不夠乾淨,去試試看。用例是在某個地方複製從方法的默認參數獲得的相同行爲,並且這些只能從最後一個參數向後設置。我想採用相同的方法,並在不同的上下文中用不同的值替換默認參數。 – ChuckE