From: SASADA Koichi Date: 2010-12-11T10:31:10+09:00 Subject: [ruby-dev:42750] Re: [Ruby 1.9-Feature#4146][Open] Improvement of Symbol and Proc (2010/12/10 20:04), Nobuyoshi Nakada wrote: > 現在Symbol#to_procで %w[12 45 32].map(&:to_i) のようなことはできますが、 > 引数を付けてメソッドを呼ぶことはできません。Symbolリテラルに引数を付け > たらその引数と共にメソッドを呼ぶProcを作る構文というのはどうでしょうか。 > > %w[12 45 32].map(&:to_i(9)).map(&:*(2)) #=> [22, 82, 58] > %w[abc def ghi].map(&:[1]) #=> ["b", "e", "h"]  メソッドだと,やっぱり書くのがめんどいっすかね? class Symbol def with *args lambda{|recv| recv.__send__(self, *args) } end end p %w[12 45 32].map(&:to_i.with(9)).map(&:*.with(2)) p %w[abc def ghi].map(&:[].with(1))  こういうのも curry 化の一種と言えるんだろうか?  method_missing を使うのはこんな感じでしょうか. class ProcMaker def method_missing sym, *args lambda{|recv| recv.__send__ sym, *args } end end PM = ProcMaker.new p %w[12 45 32].map(&PM.to_i(9)).map(&PM * 2) p %w[abc def ghi].map(&PM[1])  新しい文法を考えるのなら,& に対するメソッド呼び出しを,Proc 生成へ変 換するってのはあるかもしれない. p %w[12 45 32].map(&.to_i(9)).map(& * 2) p %w[abc def ghi].map(&[1]) #=> p %w[12 45 32].map(&lambda{|recv| recv.to_i(9)}).map(&lambda{|recv| recv * 2}) p %w[abc def ghi].map(&lambda{|recv| recv[1]}) -- // SASADA Koichi at atdot dot net