首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >module_eval / class_eval / instance_eval如何计数行号

module_eval / class_eval / instance_eval如何计数行号
EN

Stack Overflow用户
提问于 2013-05-18 17:46:58
回答 1查看 541关注 0票数 3

我发现传递给class_evalmodule_evalinstance_eval的行号与错误报告的行号不匹配。鲁比多没有解释这种行为,它说:(以instance_eval为例)

可选的第二和第三个参数提供报告编译错误时使用的文件名和起始行号。

这三种方法( class_evalmodule_evalinstance_eval )都接受另外两个参数来指定文件名和lineno参数,设置错误消息的文本。

这个问题为这种行为提供了一个实用的演示。

然而,我发现行号的计算比解释要复杂得多。这是一个演示

代码语言:javascript
复制
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_evalinstance_eval参数不是错误报告的行号,而是只与line_no相关的行号。

我想知道这个帕林的确切行为?

EN

回答 1

Stack Overflow用户

发布于 2013-09-16 14:41:52

当您的文档片段声明时,lineno指定伪文件的起始行号。您认识的字符串包含三行,其中第二行包含non_exist (%{}保留换行)。

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

%{之后插入但在non_exists之前插入的任何行都会将错误中的行号增加1,这是应该预期的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16627226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档