メモ。
RubyやJRubyには、特定の条件(コード行が変化したとか、メソッドを呼び出したなど)を満たした時に呼び出されるフック処理を定義することができます。
Ruby-1.8の低レベルなフック追加API(=C言語API)は、
thread.cのrb_add_event_hook関数。シグネチャは以下。
- void rb_add_event_hook(rb_event_hook_func_t func, rb_event_flag_t events, VALUE data);
JRuby-1.4.0で上記関数にほぼ対応するのは、Ruby.javaの
Ruby.addEventHookメソッド。シグネチャは以下。
- public void addEventHook(EventHook hook)
引数の型であるEventHookやその継承クラスは以下参照。
- public abstract class EventHook (runtime/EventHook.java)
- public class CallTraceFuncHook extends EventHook (Ruby.java)
フックAPIの挙動についての仕様書って、どこにもない感じだなあ。