Ruby、method_addeみたいに定数が定義されたときフックしたい
けど無理っぽいので本体改造してみた
Module#const_added
を定義しておいて、定数定義する関数の本体が rb_const_set(VALUE klass, ID id, VALUE val)
なので、そこに細工して定数セット後に const_added
を呼んでやればOK。
ただしrb_const_set
はRuby起動時のクラス階層初期化時にも呼ばれるので、その際はスルーする必要がある。
というわけでこうするとよさそうだった。
https://github.com/todesking/ruby/commit/ff4112340a149faf18cbe288fee02a419f801bcc
class A def self.const_added(id) puts "#{self}::#{id} added" end end A::X = 10 #=> "A::X added"
Rubyの改造、autoconfしてconfigureしてmakeすれば環境整うし、ctagsとvimのタグジャンプがあればだいたいコード追えるのでわりと参入障壁低いかんじだった。皆さんもやってみるといいですよ。