我发现传递给class_eval
,module_eval
和instance_eval
的line_number与错误报告的行号不匹配。module_eval/class_eval/instance_eval如何计算行号
任选的第二和第三个参数提供该所报告编译错误时所使用的文件名和 起始行号(使用
instance_eval
作为例子):此行为不是由ruby-doc它说说明。
所有这三种方法class_eval
,module_eval
和instance_eval
接受两个额外的PARAMS指定文件名和参数LINENO设置错误消息的文本。
this question有一个这种行为的实际演示。
但是,我发现行号的计算比解释更复杂。这里是一个演示
class Thing
def add_method
a = %{
non_exist
}
instance_eval(a, 'dummy', 12)
end
end
# error will raise to 15 instead of 12 which is specified
puts Thing.new.add_method
上面的代码证明line_no
PARAM传递给instance_eval
不被错误报告的行号,但只与line_no
。
我想知道这个参数的确切行为?