【问题标题】:Obtaining the Pod of a module without explicitly exporting it在不显式导出的情况下获取模块的 Pod
【发布时间】:2019-05-07 03:18:39
【问题描述】:

documentation in Perl 6 programs, using the Pod 6 DSL, are actually parsed as part of the code;这使得该文档在程序内部作为$=pod 变量可用。 但是,我想访问该变量,以便从测试中处理它。在this example I wrote for the Perl 6 Advent Calendar 中,它被简单地导出为一个类(在本例中为语法)变量:

our $pod = $=pod[0];

然后我可以这样使用它:

use Data::Dump;

use MONKEY-SEE-NO-EVAL;

sub MAIN( $module  ) {
    try require ::($module);
    say Dump( $::($module)::pod, :max-recursion(2) );

}

这在使用类名和正确路径调用时有效;但它仍然需要显式导出变量。

我在some code 中看到可以使用 precomp 存储(抱歉,没有好的单一来源来解释这些)用于相同的事情。最终,这条线

 return nqp::atkey($handle.unit,'$=pod')[0];

成功了,访问由 precomp 存储表示并包含在 $handle.unit 中的模块的 Pod。问题是这实际上是较低级别,使用NQP, not quite perlnqp::atkey 运算符。

有很多方法可以做到这一点,所以我可以想到两个不同的可能问题。 1. 有没有办法通过 FQN(前面是 ::)访问 required 或 used 单元的 Pod? 2. 我们是否可以访问required 或used 单元的预压缩句柄,以便我们可以直接调用nqp::atkey

【问题讨论】:

  • 嗨,JJ。如果你得到一个不错的答案,也许将它添加到Access POD from another Perl 6 file 是有意义的,或者至少是一个指向它的评论。
  • @raiph 完成。然后我可以在这里回答自己,也许......

标签: raku precompiling nqp pod6


【解决方案1】:

我使用这种技术(寻找更简单的方法)来创建Module::Pod(即将发布)。看我的回答:https://stackoverflow.com/a/57247392/332359

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    • 2014-11-14
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    • 2017-12-02
    相关资源
    最近更新 更多