Ruby でメソッドの呼び出し元の情報を取得する
例えば、次のコードのように『A.hoge
の呼び出し元の情報』を取得したいことがあります。
module A def self.hoge # 呼び出し元である X オブジェクトを取得したい end end class X A.hoge end
標準の範囲だとできなさそうだったんですが、binding_of_caller という gem を使えば実現出来るみたいです。
使い方
$ gem install binding_of_caller
使い方
require "binding_of_caller" module A def self.hoge # 呼び出し元のコンテキストで式を評価出来る p binding.of_caller(1).eval("self") # => X p binding.of_caller(1).eval("hoge") # => "hoge" end end class X def self.hoge "hoge" end A.hoge end
binding_of_caller を使用することで『呼び出し元のコンテキストで式を評価する事が出来る』ので実現することが出来ます。
闇が深い…。