我正在尝试将引发异常的上下文传递给Exception
子类,以便使用此上下文生成信息丰富的错误消息。我认识到我可以将个别数据传递给异常,但我想知道如何传递和使用整个上下文。
我知道我可以用Kernel#binding
. Ruby 2.0 类文档Binding
列出了一个方法:eval
. 这允许您在 aString
捕获的上下文中评估 a Binding
。我想知道是否可以在绑定的上下文中评估一个块。我将按如下方式使用它:
class MyError < StandardError
def initialize(str: nil, context: nil)
@str = str; @context = context
super(str)
end
def to_s
@str ? @str : @context.**SOME_METHOD** { "Error: x == #{x}" }
end
end
x = 5
raise MyError.new(context: binding)
=> Error: x == #{5}
我都试过了instance_exec
,instance_eval
对于SOME_METHOD,这两个都不起作用。有没有办法做到这一点?或者,有什么理由认为从整个上下文而不是从环境中生成单个数据片段是一个坏主意?