【问题标题】:Is there a way to get a list of all known types in a Perl 6 program?有没有办法在 Perl 6 程序中获取所有已知类型的列表?
【发布时间】:2017-07-01 13:22:38
【问题描述】:

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

【问题讨论】:

    标签: types raku


    【解决方案1】:

    这应该可以解决问题:

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

    说明:

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

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

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

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

    为了只获取类型,我对符号声明名称等于其对象类型名称的那些类型进行了 grep。

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

        .grep({ .value.HOW.^name eq 'Perl6::Metamodel::ClassHOW' })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-10
      • 1970-01-01
      • 2020-01-18
      • 1970-01-01
      • 2018-07-20
      • 1970-01-01
      • 2011-07-30
      相关资源
      最近更新 更多