有没有办法在Perl 6程序中获取所有已知类型的列表?

bri*_*foy 11 types perl6 raku

有没有办法获得Perl 6程序知道的所有已知类型(内置,定义,加载,等等)的列表?我没有特定的任务,这与确定我已经知道的类型是否已经定义有点不同.

sml*_*mls 12

这应该做的伎俩:

.say for (|CORE::, |UNIT::, |OUTERS::, |MY::)
    .grep({ .key eq .value.^name })
    .map(*.key)
    .unique
;
Run Code Online (Sandbox Code Playgroud)

说明:

Perl 6提供了伪包,允许间接查找在不同范围内声明/可见的符号.它们可以像哈希一样被访问和迭代.

  • 所有内置符号都应该在CORE::.
  • 查找在当前词法范围或其父范围之一中声明(或导入)的所有内容更加棘手.
    基于其在文档中的描述,我本来以为LEXICAL::会包含所有这些,但基于一些实验并不似乎情况下,它看起来像UNIT::,OUTERS::, MY::需要被搜索赶上"全身所有.

这些伪包中定义的符号类型包括:

  • 类型(包,模块,类,角色,本机类型,枚举类型,子集类型)
  • 函数(子程序,术语和运算符)
  • 枚举值
  • 变量和常量

为了只获取类型,我在符号声明的名称等于其对象类型的名称的地方进行了搜索.

如果只想要类,可以添加以下步骤:

    .grep({ .value.HOW.^name eq 'Perl6::Metamodel::ClassHOW' })
Run Code Online (Sandbox Code Playgroud)