如何在 Raku 中列出动态和编译时变量

How to list dynamic and Compile-time variables in Raku

在 Raku 中,我如何列出:

  1. Dynamic variables
  2. Compile time variables
  3. Packages
  4. Pseudo packages

为了在范围内列出词法变量,我使用 say ::;Pseudo packages

一般情况下你不能。

动态变量

我想从技术上讲,您可以设计一个 pad walker 例程来检查所有 pad 以查看 pad 中是否定义了动态变量并创建它的列表。但是一些动态变量在实际使用之前实际上并不存在,例如$*DISTRO(如果被引用,它位于 PROCESS:: 命名空间中):

say PROCESS::<$DISTRO>:exists;  # False
$*DISTRO;  # just need to refer to it
say PROCESS::<$DISTRO>:exists;  # True

编译时变量

编译时变量一般只在编译时存在,一般代码生成为常量。一个典型的例子是 $?LINE,它的值取决于代码中的行。

套餐

包可以是词法 (my) 范围或 OUR:: 范围。因此,可以找到它们。下降到 subclasses 的最大问题是 Rakudo 是一个不负责任的 parent。一个包知道它的 parent classes,但反过来不知道。

伪包

PseudoStash class 包含一个内部数据结构,其中包含所有可能的伪包的名称,但外部不可用。我想它可以那样做。

结论

也许关于您为什么需要这些信息的更直接的问题会给出更好、更有用的答案?