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

标签 types raku

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

最佳答案

这应该可以解决问题:

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

解释:

Perl 6 提供 Pseudo-packages允许间接查找在不同范围内声明/可见的符号。它们可以像哈希一样被访问和迭代。
  • 所有内置符号都应在 CORE:: 中.
  • 查找在当前词法范围或其父范围之一中声明(或导入)的所有内容更加棘手。
    根据文档中的描述,我会认为 LEXICAL::将包含所有这些,但基于一些似乎并非如此的实验,它看起来像 UNIT:: , OUTERS:: , MY::需要搜索才能全部捕获。

  • 这些伪包中定义的符号类型包括:
  • 类型(包、模块、类、角色、 native 类型、枚举类型、子集类型)
  • 函数(子程序、术语和运算符)
  • 枚举值
  • 变量和常量

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

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

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

    关于types - 有没有办法在 Perl 6 程序中获取所有已知类型的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44861432/

    相关文章:

    regex - Ruby 是否有类似于 Perl 6 语法的插件?

    sockets - perl6 IO::Socket::INET 与去年相比的变化以及违背的 promise

    perl - 如何使用 Perl 6 运行外部程序? (例如 Perl 5 中的 "system")

    raku - 如何使用Raku将固定数组初始化为值

    c++ - 在 C++ 中使用 size_t 是一种好习惯吗?

    class - Haskell 自定义数学类型和类

    c++ - 如何从指向 GDB 中基类的指针确定对象是否是某个派生 C++ 类的实例?

    utf-8 - perl6 Malformed UTF-8 导致程序崩溃

    haskell - 如何重载haskell中的幂函数(^)?

    haskell - 如何使用函数依赖和存在量化来为我的类型删除不必要的参数