"需要"在哪里定义?

jjm*_*elo 6 rakudo perl6 mop

我一直在寻找在Rakudo源的实施require,首先是出于好奇和第二,因为我想知道,如果它是返回的东西.

我向上看sub require,它返回了这个命中,实际上它似乎是require的来源,但它被称为sub REQUIRE_IMPORT.它返回Nil并被声明为,这几乎回答了我原来的问题.但现在我的问题是:从那个子映射到require哪里?它真的是该功能的实现吗?是否有其他一些声明的功能?

Jon*_*ton 7

require是不是一分,而是一份声明中控制(所以,在喜欢的东西的同一类别use,if,for等),它是由Perl 6的语法解析,并有被接受的几个不同的情况.它是在Perl 6动作中编译的,它有相当多的处理能力.

大部分工作都委托给各种CompUnit对象,这些对象也与use/有关need.它还必须处理require将引入的存根符号,因为给定词法范围中的符号集在编译时是固定的,并且REQUIRE_IMPORT实用程序子也涉及运行时符号导入.

在方法结束时,您的问题的答案是关于它将评估的内容:

    $past.push($<module_name>
               ?? self.make_indirect_lookup($longname.components())
               !! $<file>.ast);
Run Code Online (Sandbox Code Playgroud)

意思是:

  • 如果它是a require Some::Module然后评估查找Some::Module
  • 如果是require $file样式案例,请评估文件名