我发现传递给class_eval、module_eval和instance_eval的行号与错误报告的行号不匹配。鲁比多没有解释这种行为,它说:(以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上面的代码证明传递给instance_eval的instance_eval参数不是错误报告的行号,而是只与line_no相关的行号。
我想知道这个帕林的确切行为?
发布于 2013-09-16 14:41:52
当您的文档片段声明时,lineno指定伪文件的起始行号。您认识的字符串包含三行,其中第二行包含non_exist (%{}保留换行)。
当我执行您的代码时,我在第14行中得到一个错误,而不是您收到的第15行。我本来希望得到13,但看起来ruby解析器只会“注意”下一行的错误,可能会寻找方法参数或其他什么东西来理解non_exists (我对此还不完全确定)。如果我在non_exists之后插入另一个空行(不包含缩进),我将得到预期的13。
在%{之后插入但在non_exists之前插入的任何行都会将错误中的行号增加1,这是应该预期的。
https://stackoverflow.com/questions/16627226
复制相似问题