如何在Ruby中实现__LINE__和__FILE__常量?

ste*_*ang 12 ruby

看起来__FILE____LINE__常量是用正在执行的当前文件和行号动态更新的,我想知道Ruby中的行为是如何实现的?

我已经对源代码进行了嘲笑,但是有太多的噪音__LINE____FILE__外观,我很奇怪任何人都可以帮助我指出源代码并提供了解其行为的线索.

在任何一个RubinisMRI将是好的解释.

ham*_*mar 12

双方__FILE____LINE__得到替换文字直接在解析器:

case keyword__FILE__:
    return NEW_STR(rb_external_str_new_with_enc(ruby_sourcefile, strlen(ruby_sourcefile),
                                                rb_filesystem_encoding()));
case keyword__LINE__:
    return NEW_LIT(INT2FIX(tokline));
Run Code Online (Sandbox Code Playgroud)

换句话说,它们的行为就像您自己键入结果字符串或数字一样.

请注意,因为__LINE__并不总是表现出您的期望.