Rubyでメソッドの呼び出し元を取得する
タグ: ruby / 初版公開: 2014-03-29

Rubyではcallerメソッドでバックトレースを取得することができる。 これを利用すればあるメソッドが何処から呼び出されたのか、呼び出し元を取得することが可能だ。

def foo
  bar
end

def bar
  puts caller[0][/`([^']*)'/, 1] #=> "foo"
end

foo 

なおcallerの返却値はバックトレースの文字列の配列である。 バックトレースの文字列にはファイル名、行番号、メソッド名が含まれている。 上記コードの正規表現/`([^']*)'/はこの文字列からメソッド名を抜き出すものだ。

ちなみに呼び出し元ではなく、現在のメソッド名を取得するにはKernel.#__method__を使う。

def hoge
  p __method__ #=> :hoge
end

hoge

参考