2012-11-05 1 views
5

のRuby 1.9.xでカリー化については、私はいくつかの場所でそれを使用してきた、と基本的にはprocの引数にデフォルトパラメータをサポートするように翻訳することができます。Ruby Reverse 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 

非常に便利な、右?事は、私は逆にカレーすることができます、つまり、私のprocの最後の引数をランダムな値で埋めることができるようにしたいと思います。このように:

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

私の望む結果は3になります。これは-3を返します。

答えて

1

私はそれを行うための直接的な方法はありませんだと思うと、何をやっていることは少し怪しいです、おそらくバックカリー化よりも、あなたの問題へのよりよい解決策あなたが所望の結果を達成するために何ができるか

がラップありさあなたのprocsの周りの多くのprocsの:

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

実際にあなたは引数あなたが好きなように並べ替えが、私を信じることができる、それは厄介を取得し、非常迅速

+0

ヒュムは、それを試してみるに行く、十分にきれいに見えます。ユースケースは、メソッド上でデフォルトの引数を持つことと同じ動作を特定の場所に複製することです。これらは、最後の引数から逆方向にしか設定できません。私は同じ方法を取って、別のコンテキストで別の値でデフォルトの引数を置き換えたいと思っていました。 – ChuckE

関連する問題