似乎__FILE__
和__LINE__
常量是用正在执行的当前文件和行号动态更新的,我想知道Ruby中的行为是如何实现的?
我已经对源代码进行了改编,但__LINE__
和__FILE__
外观的噪音太多了,我想知道是否有人可以帮助我指出源代码并提供理解其行为的线索。
Rubinis
或MRI
中的说明没问题。
答案 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。