如何在 Raku 中列出动态和编译时变量
How to list dynamic and Compile-time variables in Raku
在 Raku 中,我如何列出:
为了在范围内列出词法变量,我使用 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 包含一个内部数据结构,其中包含所有可能的伪包的名称,但外部不可用。我想它可以那样做。
结论
也许关于您为什么需要这些信息的更直接的问题会给出更好、更有用的答案?
在 Raku 中,我如何列出:
为了在范围内列出词法变量,我使用 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 包含一个内部数据结构,其中包含所有可能的伪包的名称,但外部不可用。我想它可以那样做。
结论
也许关于您为什么需要这些信息的更直接的问题会给出更好、更有用的答案?