我希望我的异常类之一能够获取在其上下文中引发异常的对象。例如,在半伪代码中
class Foo
def zorch!
raise MyException.new("d'oh!")
end
end
c = Foo.new
c.zorch!
我希望MyException#initialize
能够获取对象c
。
这可能可以在 #initialize
方法中使用 self.send(:binding)
以某种方式完成,但我还没有弄清楚如何:
Kernel.eval('self', self.send(:binding)).class.name
=> MyException # *not* 'Foo'
这是有道理的,因为 MyException 尚未完全实例化并且 self.send(:binding)
指的是当前上下文而不是调用者的上下文。
那么我怎样才能访问调用者的上下文/绑定(bind)呢?
最佳答案
class MyException < StandardError
attr_reader :obj
def initialize obj, *args; super(*args); @obj = obj end
end
class Foo
def zorch!
raise MyException.new(self, "d'oh!")
end
end
c = Foo.new
begin
c.zorch!
rescue => e
puts e.obj
end
# => #<Foo:0x007fdd4a474da0>
关于ruby - 异常类如何获得引发它的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18544546/