カリー化をサポートするRuby1.9は、任意の数の引数を取るprocを処理する2つの方法をサポートしています。
my_proc = proc {|*x| x.max }
1)curry
引数なし:my_proc.curry
。通常のprocと同じように、カンマ区切りの引数をcurriedprocに渡します。引数の数が任意である場合、これは適切なカリー化を達成しません(引数の一部がスプラットでない場合に役立ちます)
2)curry
引数付き:my_proc.curry(n)
このように、カリー化は、procが引数を取るかのように適用されn
ます。例えば:
my_proc.curry(3).call(2).call(5).call(1) #=> 5
では、どのようにして任意の数の引数でカリー化を実現しますか?つまり、n
与えられていない場合は?
私の頭に浮かぶ1つの方法は、プロキシを介して引数を収集し、次にviacall
を解決することです(引数なしで使用されている/使用されている以外のメソッドがある場合は、収集された引数を使用してを呼び出します)が、他の方法を探していますそれを達成するために。proc
method_missing
call
call
proc
アップデート
Andy Hが述べたように、問題はいつカリー化をやめるかです。私の目的では、カリー化が停止したり、他のメソッドcall
が呼び出されたとき、またはcall
引数なしで呼び出されたときにprocが評価したりしても問題ありません。