我發現傳遞給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
。
我想知道這個參數的確切行爲?