gpt4 book ai didi

ruby - module_eval/class_eval/instance_eval 如何统计行号

转载 作者:太空宇宙 更新时间:2023-11-03 16:53:01 29 4
gpt4 key购买 nike

我发现传递给 class_evalmodule_evalinstance_eval 的行号与错误报告的行号不匹配。 ruby-doc 未解释此行为其中说:(以 instance_eval 为例)

the optional second and third parameters supply a filename and starting line number that are used when reporting compilation errors.

所有这三个方法 class_evalmodule_evalinstance_eval 接受两个额外的参数来指定文件名和 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

上面的代码证明传递给instance_evalline_no参数不是报错的行号,只是和line_no相关>。

我想知道这个参数的确切行为?

最佳答案

正如您的文档片段所述,lineno 指定伪文件的起始 行号。您评估的字符串包含三行,其中第二行包含 non_exist(%{} 保留换行符)。

当我执行您的代码时,第 14 行出现错误,而不是您收到的第 15 行。我原本希望得到 13,但似乎 ruby​​ 解析器只会“注意到”下一行的错误,可能会寻找方法参数或其他东西来理解 non_exists(我我不完全确定)。如果我在 non_exists 之后插入另一个空行(不包含缩进),我会得到预期的 13。

%{ 之后但在 non_exists 之前插入的任何行都会将错误中的行号增加 1,正如预期的那样。

关于ruby - module_eval/class_eval/instance_eval 如何统计行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16627226/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com