0

クラスメソッドをパラメーターとして渡して、別のオブジェクトに呼び出させたいと思います。

do_this(Class.method_name)

その後:

def do_this(class_method)
  y = class_method(local_var_x)
end

私が見ることができる唯一の方法は、それを文字列として渡してevalを使用するか、クラスとメソッドを文字列として渡し、定数化して送信することです。eval の欠点は速度とデバッグのようですか?

これを行う簡単な方法はありますか?

編集:

良い答えですが、質問が少し間違っていることに気付きました。メソッドで渡されないパラメーターを使用したいと思います。

4

2 に答える 2

3

あなたが提案した2番目の解決策に似たアプローチをお勧めします。

do_this(Class.method(:name), x)

その後:

def do_this(method, x)
   y = method.call(x)
end

のドキュメントも参照してくださいObject#method

于 2013-02-11T20:30:05.890 に答える
1

proc オブジェクトの使用を検討してください。

def do_this(myproc)
    y = myproc.call
end

その後

do_this( Proc.new { klass.method(x) } )

ただし、よりRubyスタイルに近いブロックの使用も検討する必要があります。それは次のようになります。

def do_this
   y = yield
end

次の方法で呼び出します。

do_this { klass.method(x) }
于 2013-02-11T20:39:15.937 に答える