出于好奇,我一直在Rakudo source中寻找require
的实现,其次是因为我想知道它是否正在返回某些东西。
我抬起头来sub require
,它返回了this hit,实际上似乎是require的来源,但是它叫做sub REQUIRE_IMPORT
。它返回Nil
并这样声明,这几乎可以回答我的原始问题。但是现在我的问题是:从那个子到require
的映射在哪里?确实是该功能的实现吗?还有其他一些这样声明的功能吗?
答案 0 :(得分:7)
require
不是子元素,而是语句控制(因此,在use
,if
,for
等类似的类别中)是parsed by the Perl 6 grammar,并且接受了几种不同的情况。它是compiled in the Perl 6 actions,需要处理很多。
许多工作都委托给各种CompUnit
对象,它们也与use
/ need
有关。它还必须注意对require
引入的符号进行存根处理,因为给定词法范围内的符号集在编译时是固定的,并且REQUIRE_IMPORT
Utility子项与运行时有关符号导入也是如此。
该方法的结果是对您的问题的答案:
$past.push($<module_name>
?? self.make_indirect_lookup($longname.components())
!! $<file>.ast);
意思是:
require Some::Module
,则求值为Some::Module
require $file
样式的情况,请评估为文件名