【问题标题】:How to list dynamic and Compile-time variables in Raku [closed]如何在 Raku 中列出动态和编译时变量 [关闭]
【发布时间】:2020-04-06 01:11:57
【问题描述】:

在Raku,我该如何列出:

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

要列出范围内的词法变量,我使用say ::;Pseudo packages

【问题讨论】:

    标签: raku introspection


    【解决方案1】:

    一般来说,你不能。

    动态变量

    我想从技术上讲,您可以设计一个 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 类包含一个内部数据结构,其中包含所有可能的伪包的名称,但在外部不可用。我想应该可以这样。

    结论

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

    【讨论】:

    • “Rakudo 是一个不负责任的父母”——感谢 lizmat++ 今天的微笑
    • 谢谢!用途:当用户输入$*$?时,在p6-jupyter-kernel中完成,开发时快速查找。
    • 我想知道 Comma 是如何解决这个问题的?我猜他们在某处保留了一份清单?
    猜你喜欢
    • 2020-11-15
    • 2015-04-03
    • 1970-01-01
    • 2019-12-09
    • 2012-09-17
    • 2011-06-15
    • 1970-01-01
    • 2012-02-23
    相关资源
    最近更新 更多