"require" 在哪里定义的?
Where is "require" defined?
我一直在查看 Rakudo source for the implementation of require
,首先是出于好奇,其次是因为我想知道它是否返回了一些东西。
我查了一下sub require
,返回的是this hit,其实好像是require的源码,其实叫sub REQUIRE_IMPORT
。它 returns Nil
并被声明为这样,这几乎回答了我原来的问题。但现在我的问题是:从那个 sub 到 require
的映射在哪里?它真的是该功能的实现吗?是否有其他函数以这种方式声明?
require
不是子控件,而是语句控件(因此,在 use
、if
、for
等同一类别中。 ) 是 parsed by the Perl 6 grammar and there are a few different cases that are accepted. It is compiled in the Perl 6 actions,需要处理的东西很多。
大部分工作委托给各种 CompUnit
对象,这些对象也涉及 use
/need
。它还必须处理 require
将引入的存根符号,因为给定词法范围内的符号集在编译时是固定的,并且 REQUIRE_IMPORT
实用程序 sub 与运行时有关符号也导入。
你的问题的答案将在方法的末尾给出:
$past.push($<module_name>
?? self.make_indirect_lookup($longname.components())
!! $<file>.ast);
这意味着:
- 如果它是
require Some::Module
则评估为查找 Some::Module
- 如果是
require $file
风格的案例,计算文件名
我一直在查看 Rakudo source for the implementation of require
,首先是出于好奇,其次是因为我想知道它是否返回了一些东西。
我查了一下sub require
,返回的是this hit,其实好像是require的源码,其实叫sub REQUIRE_IMPORT
。它 returns Nil
并被声明为这样,这几乎回答了我原来的问题。但现在我的问题是:从那个 sub 到 require
的映射在哪里?它真的是该功能的实现吗?是否有其他函数以这种方式声明?
require
不是子控件,而是语句控件(因此,在 use
、if
、for
等同一类别中。 ) 是 parsed by the Perl 6 grammar and there are a few different cases that are accepted. It is compiled in the Perl 6 actions,需要处理的东西很多。
大部分工作委托给各种 CompUnit
对象,这些对象也涉及 use
/need
。它还必须处理 require
将引入的存根符号,因为给定词法范围内的符号集在编译时是固定的,并且 REQUIRE_IMPORT
实用程序 sub 与运行时有关符号也导入。
你的问题的答案将在方法的末尾给出:
$past.push($<module_name>
?? self.make_indirect_lookup($longname.components())
!! $<file>.ast);
这意味着:
- 如果它是
require Some::Module
则评估为查找Some::Module
- 如果是
require $file
风格的案例,计算文件名