14

似乎__FILE__and__LINE__常量会随着当前文件和正在执行的行号动态更新,我想知道在 Ruby 中如何实现该行为?

我已经搜索了源代码,但是有太多的噪音__LINE____FILE__外观,我想知道任何人都可以帮助我指出源代码并提供理解其行为的线索。

Rubinis或中的解释MRI都可以。

4

1 回答 1

14

两者都直接在解析器中__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));

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

请注意,对于__LINE__, 这并不总是像您期望的那样。

于 2013-05-18T17:41:28.897 回答