似乎__FILE__
and__LINE__
常量会随着当前文件和正在执行的行号动态更新,我想知道在 Ruby 中如何实现该行为?
我已经搜索了源代码,但是有太多的噪音__LINE__
和__FILE__
外观,我想知道任何人都可以帮助我指出源代码并提供理解其行为的线索。
Rubinis
或中的解释MRI
都可以。
似乎__FILE__
and__LINE__
常量会随着当前文件和正在执行的行号动态更新,我想知道在 Ruby 中如何实现该行为?
我已经搜索了源代码,但是有太多的噪音__LINE__
和__FILE__
外观,我想知道任何人都可以帮助我指出源代码并提供理解其行为的线索。
Rubinis
或中的解释MRI
都可以。
两者都直接在解析器中__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__
, 这并不总是像您期望的那样。