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

时间:2013-05-18 17:19:59

标签: ruby

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

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

RubinisMRI中的说明没问题。

1 个答案:

答案 0 :(得分:12)

__FILE____LINE__都被文字directly in the parser取代:

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__,此doesn't always behave how you'd expect