在哪里定义“需求”?

时间:2018-12-05 11:04:36

标签: perl6 rakudo mop

出于好奇,我一直在Rakudo source中寻找require的实现,其次是因为我想知道它是否正在返回某些东西。

我抬起头来sub require,它返回了this hit,实际上似乎是require的来源,但是它叫做sub REQUIRE_IMPORT。它返回Nil并这样声明,这几乎可以回答我的原始问题。但是现在我的问题是:从那个子到require的映射在哪里?确实是该功能的实现吗?还有其他一些这样声明的功能吗?

1 个答案:

答案 0 :(得分:7)

require不是子元素,而是语句控制(因此,在useiffor等类似的类别中)是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样式的情况,请评估为文件名