to_proc -> Proc
self に対応する Proc オブジェクトを返します。生成される Proc オブジェクトを呼びだす(Proc#call)と、 その第一引数の self という名前のメソッドを 残りの引数を渡して呼びだされます。
サンプルではこんな事になってます。
:to_i.to_proc["ff", 16] # => 255 (1..3).collect(&:to_s) #=> ["1", "2", "3"] (1..3).inject(&:+) #=> 6
自分でも試してみると
> :upcase.to_proc["s"] => "S"
第一引数に対象オブジェクト
第二引数以降にメソッドの引数
という感じですかね。
ところが実行に引数をつけるメソッドの場合、
次の例のように、横着してto_procに似せてオブジェクト渡してもダメです。
> (65..70).map(&:+[2]) => #<Enumerator: 65..70:map>
なので以前書いた記事で扱ったように、each_with_objectと組み合わせれば良いです。
> (65..70).each_with_object(2).map(&:+) #=> [67, 68, 69, 70, 71, 72]
ただまぁ、冗長ですよね。
aliasとかで糖衣してしまうのも手ですけど。
一応、この問題に関しては
コチラの記事にあるgemが選択肢としてあるみたいです。