我正在使用一个在类上动态定义一些方法的 gem,类似于:
class << self
some_strings.each do |string|
eval <<-RUBY
def #{string}
....
end
RUBY
end
end
在那些动态定义的方法中引发的任何异常都有无用的回溯;它们导致类似于(eval):2
而不是实际的行号。
我想按照以下方式修改此代码:
eval <<-RUBY, nil, __FILE__, __LINE__ + 1
...为了获得更好的回溯。
但是,与class_eval
and不同instance_eval
,plain oldeval
有一个可选binding
参数,我不确定传递nil
给它是否是个好主意,如上所示。
它似乎确实有效,并且eval 的文档说绑定是可选的:
If binding is given, which must be a Binding object, the evaluation is
performed in its context.
尽管如此,我还是喜欢一些有用的解释,因为我还没有很好地掌握绑定和动态评估。
动态评估class << self
块内代码并确保有用的回溯的正确方法是什么?