Ruby で可変長引数の Proc オブジェクトをカリー化する

可変長引数を受け取る Proc オブジェクトをカリー化する場合、#curry メソッドに対して任意の引数数を指定する事ができます。

sum = proc { |*args| args.inject :+ }

# #curry に対して引数の数を渡す
# 引数を2つ受け取ったら評価する
p sum.curry(2).(1).(2)
# => 3

# 引数を3つ受け取ったら評価する
p sum.curry(3).(1).(2).(3)
# => 6

# 一度に指定した引数以上を渡した場合はその引数がすべて渡される
p sum.curry(2).(1, 2, 3, 4)
# => 10

# #curry に引数を渡さなかった場合は1回目で評価される
p sum.curry.(5)
# => 5