raku - “要求”在哪里定义?
问题描述
我一直在寻找Rakudo的源代码来实现require
,首先是出于好奇,其次是因为我想知道它是否正在返回一些东西。
我查了一下sub require
,它返回了这个 hit,这实际上似乎是 require 的来源,但它被称为sub REQUIRE_IMPORT
. 它返回Nil
并被声明为这样,这几乎回答了我原来的问题。但现在我的问题是:从那个 sub 到的映射在哪里require
?它真的是该功能的实现吗?是否还有其他一些以这种方式声明的函数?
解决方案
require
不是 sub,而是语句控件(因此,在同一类别中,例如use
, if
,for
等)它由 Perl 6 语法解析,并且有几种不同的情况被接受。它是在 Perl 6 操作中编译的,它有很多需要处理的地方。
大部分工作都委托给各种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
样式案例,请评估文件名
推荐阅读
- python - 寻找一种简单有效的方法来在 python 中生成随机数,以便在每 10 个数字序列中数字不会重复
- python - 按数组比较列值
- html - 如何在带有信用卡图标的单选按钮上应用 flexbox 样式?
- mongodb - Mongodb:查询匹配未知键的文档
- gradle - 无法创建 Forge Gradle 工作区
- jquery - 如何让mousemove在每个特定时间运行一次
- angularjs - $rootScope 变量在指令内未定义
- vba - 在 Word VBA 的书签中添加多个表格,同时维护和扩展书签
- c# - AutoSizeColumn 适用于所有列,但包含日期时间值的列除外
- javascript - 如何使用 string.replace() 保留字符大小写?