関数がラムダとして変数に格納されている場合、オブジェクトで関数を呼び出す (メッセージを送信する) ことは可能ですか?
次のような配列があるとします%w(a b c)
次に、次のようなメソッドをチェーンできます。
%w(a b c).reverse.map(&:upcase) # => ["C", "B", "A"]
変数への連鎖メソッド呼び出しを抽出し、それらを他の配列オブジェクトに適用することは可能ですか?
transform = -> { reverse.map(&:upcase) }
私は次のことを試しましたが、運がありませんでした:
JRuby 1.7.1 の使用
%w(a b c).send(transform)
TypeError: #<Proc:0x19a639d8@(irb):12 (lambda)> is not a string
と
%w(a b c).send(&transform)
ArgumentError: wrong number of arguments (0 for 1)
Ruby 1.9.3 を使用する
%w(a b c).send(transform)
TypeError: #<Proc:0x007fa0721f0dc8@(irb):1 (lambda)> is not a symbol
と
%w(a b c).send(&transform)
ArgumentError: no method name given