2017-08-09 3 views
-3

私はレールコード内で実行されるすべてのメソッドに対していくつかの処理を行いたいのですが、実行時にメソッドに関するいくつかの情報が必要です。私はこれを行うにはset_trace_funcを使用しています。 set_trace_funcの内部では、バインディングを受け取ります。バインディングが与えられたら、railsメソッドが返すものを決定します。

set_trace_func proc { |event, file, line, id, binding, classname| 
    printf "%8s %s:%-2d %10s %8s\n", event, file, line, id, classname 
} 

このバインディングから関数が返すものはどうすればわかりますか?私は変数やパラメータなどにアクセスする方法を知っていますが、戻り値を取得する方法を理解することはできませんまた、これを行うためのよりよいツールがありますか?

+0

どのような機能ですか?どこから決定するのですか?わかりやすい説明をお願いします。 – mudasobwa

+0

また、この質問は、レールもメタプログラミングも関係ありません。 – mudasobwa

+0

@mudasobwaこれは役に立ちますか? –

答えて

3

set_trace_funcを検査することができTracePointに取って代わられた方法のreturn_value

def foo 
    2 * 3 
end 

TracePoint.trace(:return) do |tp| 
    puts "`#{tp.method_id}' returned #{tp.return_value.inspect}" 
end 

foo 

出力:Cで実装方法やブロックのためのb_returnをトレースすることも:c_returnあります

`foo' returned 6 

関連する問題