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

tin*_*ino 6 introspection raku

在 Raku 中,我如何列出:

  1. 动态变量
  2. 编译时变量
  3. 套餐
  4. 伪包

为了列出作用域中的词法变量,我使用say ::;Pseudo packages

Eli*_*sen 7

你不能,一般。

动态变量

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

say PROCESS::<$DISTRO>:exists;  # False
$*DISTRO;  # just need to refer to it
say PROCESS::<$DISTRO>:exists;  # True
Run Code Online (Sandbox Code Playgroud)

编译时变量

编译时变量通常只存在于编译时,并且通常被编码生成为常量。一个主要的例子是$?LINE,它的值取决于代码中的行。

套餐

包可以是词法 ( my) 范围或OUR::范围。因此,可以找到它们。降入子类的大问题是乐堂是一个不负责任的父母。一个包知道它的父类,但反过来不知道。

伪包

PseudoStash类包含一个包含所有可能的假包的名称内部数据结构,而不是外部可用。我想它可以这样制作。

结论

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

  • “Rakudo 是一个不负责任的父母”——感谢 lizmat++ 今天的微笑 (3认同)
  • 谢谢 !对于使用:它是在[p6-jupyter-kernel](https://github.com/bduggan/p6-jupyter-kernel/blob/f70da7d51f22dc4926bc9c463ef3cf65b575fa9a/lib/Jupyter/Kernel/Sandbox/Autocomplete.rakumod#中获得完成L67-L71) 当用户输入 `$*` 或 `$?` 时,可以在开发时快速查找。 (3认同)
  • 我想知道 Comma 是如何解决这个问题的?我猜他们在某个地方保存了一份清单? (3认同)