Rubyの黒魔術
TechRubyの黒魔術といえば?
eval
文字列として与えられたRubyプログラムを実行できる。instance_eval, class_eval, module_evalというバリエーションがある。
method_missing
NoMethodErrorをフックできる。存在しないメソッドが生えてるように見せられる。DSL実装に使われる。
使う時はrespond_to?も併せて定義すべき。というか大抵はdefine_methodで足りる。
instance_variable_set
オブジェクトの外側から勝手にインスタンス変数を注入するメソッド。JavaScriptのオブジェクトみたいに好きなプロパティを生やすことができる。
TracePoint
Rubyの一挙手一投足をフックできる。昔はset_trace_funcというのが同じ役目だった。
callcc
時空を巻き戻す最終魔法。強力すぎるのでrequireしないと使えないよう封印された。特にC拡張が時空の歪みに巻き込まれて死んだりするらしい。
finalizer
オブジェクトが消える瞬間を観測できる。筆者は使ったことがない。