有没有办法在 Perl 6 程序中获取所有已知类型的列表?
Is there a way to get a list of all known types in a Perl 6 program?
有没有办法获取 Perl 6 程序知道的所有已知类型(内置、定义、加载等)的列表?我心中没有特定的任务,这与弄清楚我已经知道的类型是否已被定义有点不同。
这应该可以解决问题:
.say for (|CORE::, |UNIT::, |OUTERS::, |MY::)
.grep({ .key eq .value.^name })
.map(*.key)
.unique
;
解释:
Perl 6 提供 Pseudo-packages 允许在不同范围内间接查找 declared/visible 的符号。它们可以像哈希一样被访问和迭代。
- 所有内置符号都应在
CORE::
中。
- 查找在当前词法作用域或其父作用域之一中声明(或导入)的所有词法更加棘手。
根据文档中的描述,我原以为 LEXICAL::
会包含所有这些内容,但基于一些似乎并非如此的实验,它看起来像 UNIT::
、OUTERS::
, 和 MY::
需要搜索才能全部捕获。
这些伪包中定义的符号种类包括:
- 类型(包、模块、类、角色、本机类型、枚举类型、子集类型)
- 函数(子例程、术语和运算符)
- 枚举值
- 变量和常量
为了只获取类型,我 grep 了符号声明名称等于其对象类型名称的类型。
如果您只想要 类,您可以添加以下步骤:
.grep({ .value.HOW.^name eq 'Perl6::Metamodel::ClassHOW' })
有没有办法获取 Perl 6 程序知道的所有已知类型(内置、定义、加载等)的列表?我心中没有特定的任务,这与弄清楚我已经知道的类型是否已被定义有点不同。
这应该可以解决问题:
.say for (|CORE::, |UNIT::, |OUTERS::, |MY::)
.grep({ .key eq .value.^name })
.map(*.key)
.unique
;
解释:
Perl 6 提供 Pseudo-packages 允许在不同范围内间接查找 declared/visible 的符号。它们可以像哈希一样被访问和迭代。
- 所有内置符号都应在
CORE::
中。 - 查找在当前词法作用域或其父作用域之一中声明(或导入)的所有词法更加棘手。
根据文档中的描述,我原以为LEXICAL::
会包含所有这些内容,但基于一些似乎并非如此的实验,它看起来像UNIT::
、OUTERS::
, 和MY::
需要搜索才能全部捕获。
这些伪包中定义的符号种类包括:
- 类型(包、模块、类、角色、本机类型、枚举类型、子集类型)
- 函数(子例程、术语和运算符)
- 枚举值
- 变量和常量
为了只获取类型,我 grep 了符号声明名称等于其对象类型名称的类型。
如果您只想要 类,您可以添加以下步骤:
.grep({ .value.HOW.^name eq 'Perl6::Metamodel::ClassHOW' })