raku - "require"定义在哪里?

标签 raku rakudo mop

我一直在寻找Rakudo source用于执行 require ,首先是出于好奇,其次是因为我想知道它是否正在返回一些东西。

我查了sub require它返回 this hit , 这实际上似乎是 require 的来源,但它被称为 sub REQUIRE_IMPORT .它返回 Nil并被声明为这样,这几乎回答了我原来的问题。但现在我的问题是:从那个 sub 到 require 的映射在哪里? ?它真的是该功能的实现吗?是否还有其他一些以这种方式声明的函数?

最佳答案

require不是子控件,而是语句控件(因此,在同一类别中,例如 useiffor 等)它是 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/

    相关文章:

    grammar - 有 Perl6 规范形式吗?

    arrays - 如何在 Perl 6 中将未展平的数组重复传递给 reduce?

    raku - 在 raku 中取消绑定(bind)或取消定义变量

    common-lisp - sbcl/CLOS 为什么我必须在这里添加一个 "validate-superclass"-Method?

    common-lisp - 自定义插槽选项不会对其参数应用任何缩减

    perl - 在 Moose 中处理多个继承的构造函数

    raku - 如何使用 Zef 仅安装测试依赖项

    grammar - Perl 6是否应该能够从不同的来源中解脱出包含相同角色的问题?

    metaprogramming - 您如何从它们所属的类型之外访问私有(private)方法或属性?

    raku - 为什么 Rakudo dd 为键入和分配的标量返回 Nil?