gemを使っていたり、扱っているソースが大規模だったりする時に、メソッドの定義場所を調査したい場合がある。 RubyにはProc#source_location
で、メソッドの定義場所を取得することができる。 使い方は簡単で、調査対象のメソッドをいったんMethod
オブジェクトに変換し、source_location
メソッドを呼びだせば良い。
例えば標準添付ライブラリのopen-uri
はKernel#open
を再定義することで、URIを直接open
することを可能にする。 この時にKernel#open
の実体がどこで定義されているのか調べてみよう。 以下のコードのとおり、Kernel#open
はopen-uri
の27行目で再定義されていることが確認できる。
require 'open-uri'
method = Kernel.method(:open) # Kernel#openのMethodオブジェクトの取得
p method.source_location # => ["/usr/lib/ruby/1.9.1/open-uri.rb", 27]
source_location
の使い方については、パーフェクトRubyの6-1-1のコラムとして簡単な解説が掲載されている。
パーフェクトRuby (PERFECT SERIES 6)
posted with amazlet at 13.12.01
Rubyサポーターズ すがわら まさのり 寺田 玄太郎 三村 益隆 近藤 宇智朗 橋立 友宏 関口 亮一
技術評論社
売り上げランキング: 10,788
技術評論社
売り上げランキング: 10,788