【发布时间】:2020-04-06 01:11:57
【问题描述】:
【问题讨论】:
标签: raku introspection
【问题讨论】:
标签: raku introspection
一般来说,你不能。
我想从技术上讲,您可以设计一个 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:: 作用域。因此,可以找到它们。下降到子类的最大问题是 Rakudo 是一个不负责任的父母。包知道它的父类,但反之则不然。
PseudoStash 类包含一个内部数据结构,其中包含所有可能的伪包的名称,但在外部不可用。我想应该可以这样。
也许关于您为什么想要这些信息的更直接的问题会给出更好、更有用的答案?
【讨论】:
$*或$?时,在p6-jupyter-kernel中完成,开发时快速查找。