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

时间:2017-07-01 13:22:39

标签: types perl6 raku

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

1 个答案:

答案 0 :(得分:12)

这应该可以解决问题:

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

说明:

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

  • 所有内置符号都应位于CORE::中。
  • 查找在当前词法范围或其中一个父范围中声明(或导入)的所有内容更加棘手。
    根据文档中的描述,我原以为LEXICAL::会包含所有这些内容,但基于一些似乎并非如此的实验,它看起来像UNIT::,{{1需要搜索}, OUTERS::才能抓住所有人。

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

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

为了只获取类型,我抓住了符号声明名称等于其对象类型名称的类型。

如果您只想要课程,可以添加以下步骤:

MY::