我发现传递给 的 line_numberclass_eval
与module_eval
错误instance_eval
报告的行号不匹配。ruby-doc没有解释这种行为, 它说:(instance_eval
用作示例)
可选的第二个和第三个参数提供报告编译错误时使用的文件名和起始行号。
所有这三个方法class_eval
,module_eval
并instance_eval
接受两个额外的参数来指定文件名和 lineno 参数设置错误消息的文本。
这个问题有一个关于这种行为的实际演示。
但是,我发现行号的计算比解释更复杂。这是一个演示
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
传递给的参数instance_eval
不是报错的行号,而只是与line_no
.
我想知道这个参数的确切行为?