4

を使用してメソッド定義の瞬間をキャプチャできることを知っていset_trace_funcます。

set_trace_func ->event, file, line, method, binding, klass{
  if event == "c-call" and method == :method_added
    # The moment of method definition
  end
}
  1. そのような瞬間に定義されているメソッドの名前をキャプチャすることは可能ですか? でクラスをキャプチャできることはわかっていeval("self", binding)ます。メソッド名を取得するために、上記のブロック内にどのコードを入れることができますか?
  2. 定義されているメソッドの引数の形式を取得することはさらに可能ですか (必要な引数、残りの引数、およびソースにあるとおりの名前)。
4

2 に答える 2

1

以外ではset_trace_func、次を使用できますModule.method_added

class Test
  def self.method_added(method_name)
    puts "#{method_name} added to #{self}"
  end

  def foo
    "foo"
  end
end

$ ruby test.rb
# => foo added to Test
于 2012-10-07T18:21:34.343 に答える
0

ドキュメントを確認してください。

Kernel.set_trace_funcproc を使用すると、パラメーターをキャッチできますid。これは、ほとんどの場合、関数名です。

ただし、あなたの例から学ぶと、eval("__method__", binding)...を使用して現在実行中のメソッドを取得することもできますが、これはクラスで定義したメソッドのみを取得すると思います。

于 2013-10-11T06:23:48.400 に答える