例外クラスの 1 つが、例外が発生したコンテキストのオブジェクトを取得できるようにしたいと考えています。たとえば、半疑似コードでは
class Foo
def zorch!
raise MyException.new("d'oh!")
end
end
c = Foo.new
c.zorch!
MyException#initializeオブジェクトを取得できるようにしたいc。
これはおそらくメソッドを使用self.send(:binding)して何らかの方法で実行できます#initializeが、まだ方法がわかりません:
Kernel.eval('self', self.send(:binding)).class.name
=> MyException # *not* 'Foo'
MyException はまだ完全にインスタンス化されておらずself.send(:binding)、呼び出し元ではなく現在のコンテキストを参照しているため、これは理にかなっています。
では、呼び出し元のコンテキスト/バインディングにアクセスするにはどうすればよいでしょうか?