2012-02-25 11 views
1

のメソッドにPROCを変換する標準的な方法は、あなたのようなラムダを呼び出すことができること、しかし、いくつかのRubyでこれを行う方法?:ルビー

add = lambda { |x, y| x + y } 
add_m = add.to_method 
add_m(3, 4) 
+0

を追加し、 4] 'あなたは括弧を使いたい/必要がありますか? – Phrogz

+0

。私は 'add_m(3、4)'が欲しいです。 –

答えて

7
add = lambda { |x, y| x + y } 
define_singleton_method(:add_m,&add) 
p add_m(3,4) 
#=> 7 

注そこですしかし、角括弧を持つ方法は:

add = lambda { |x, y| x + y } 
p add[3,4] 
#=> 7 
+0

興味深い。標準的な方法がない場合は、おそらくこれを使用します。 –

+0

@VladtheImpala 'define_singleton_method'を使って私の修正された答えを見てください。 – Phrogz

+2

'add。(3,4)'もRuby(1.9.0+)のやや新しいバージョンを前提としています。 –

0

あなたに結合されている変数/シンボルの名前を取得する簡単な方法はありませんので、部分的に、あなたは正確に得ることができるとは思いません。

最も近いマッチ私見:それはあなたがにメソッドを追加するオブジェクトはない場合

class Proc 
    def to_method(m) 
    p=self 
    Object.class_eval {define_method(m, &p)}  
    end; 
end 

add = lambda { |x, y| x + y } 
add.to_method(:add_m) 
add_m(3, 4) 

、あなたもクラスに渡す必要があります。

構文はあまり関係ない場合は、Phrogz」の提案で行くことができます:あなたは `add_m [3の代わりに平均値、[3,4]

か、単に

add.call(3,4)