我一直在寻找Rakudo source用于执行 require
,首先是出于好奇,其次是因为我想知道它是否正在返回一些东西。
我查了sub require
它返回 this hit , 这实际上似乎是 require 的来源,但它被称为 sub REQUIRE_IMPORT
.它返回 Nil
并被声明为这样,这几乎回答了我原来的问题。但现在我的问题是:从那个 sub 到 require
的映射在哪里? ?它真的是该功能的实现吗?是否还有其他一些以这种方式声明的函数?
最佳答案
require
不是子控件,而是语句控件(因此,在同一类别中,例如 use
、 if
、 for
等)它是 parsed by the Perl 6 grammar并且有几种不同的情况被接受。是compiled in the Perl 6 actions ,这有相当多的处理。
大部分工作委托(delegate)给各种CompUnit
对象,也与 use
相关/need
.它还必须处理 require
的 stub 符号。将引入,因为给定词法范围内的符号集在编译时是固定的,而 REQUIRE_IMPORT
实用程序 sub 也涉及运行时符号导入。
您的问题的答案将在方法结束时给出:
$past.push($<module_name>
?? self.make_indirect_lookup($longname.components())
!! $<file>.ast);
意思是:
require Some::Module
然后评估为 Some::Module
的查找require $file
样式大小写,计算为文件名 关于raku - "require"定义在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53630822/