本当は怖いHPC

HPC屋の外部記憶装置。メモ書き。ちゃんとしたものは別のところに書く予定です

メソッドの定義行をpure rubyで取れないかな

fault_injection.rbを作っていて、メソッドの定義行を pure ruby で取れないかなと思った。今のところ方法を発見できていない。

Procクラスだとto_sでファイルと行番号が含まれるのだが、Methodクラスのto_sメソッドには含まれない。なんだか微妙に理不尽。

# irb

irb(main):001:0> Proc.new{}.to_s
=> "#<Proc:0x00000000@(irb):1>"

irb(main):002:0> class Foo;def foo;end;end
irb(main):003:0> Foo.new.mothod(:foo).to_s
=> "#<Method: Foo#foo>"
  • rubyforgeにいくつかあるRubyのパーサーを使う
  • 1.9なら、1.9から入るripperを使う
  • とりあえずゆるい感じで正規表現とかで .rb ファイルをパースする
  • スクリプトのはじめからset_trace_funcでメソッド定義を監視する

っていう手段があるんだけど、どうしようかな・・・

あるいは、手段があるだろうか?てかripperはどうなんだろう・・・?青木さんのページの最終更新が2005年になってるんだけど・・・