gpt4 book ai didi

module - 如何找到 Perl 6 模块的版本和权限?

转载 作者:行者123 更新时间:2023-12-04 00:59:46 25 4
gpt4 key购买 nike

在 Bar.pm 中,我声明了一个具有权限(作者)和版本的类:

class Bar:auth<Camelia>:ver<4.8.12> {
}

如果我在程序中使用它,我如何查看我正在使用的模块的版本、谁编写了它以及模块加载器是如何找到它的?与往常一样,文档链接很重要。

perl6-users 上也有人问过这个问题但在出现令人满意的答案(或文档链接)之前就死了。

这个问题的另一个问题是许多人没有将这些信息添加到他们的类或模块定义中。它显示在 META.json 文件中,但不显示在代码中。

最佳答案

(可能不是一个令人满意的答案,因为事情的事实并不是很令人满意,特别是关于文档的状态,但这里是......)



如果模块或类直接在源代码中进行版本控制 à la class Bar:auth<Camelia>:ver<4.8.12> ,那么任何导入它的代码都可以introspect它:

use Bar;

say Bar.^ver; # v4.8.12
say Bar.^auth; # Camelia

# ...which is short for:
say Bar.HOW.ver(Bar); # v4.8.12
say Bar.HOW.auth(Bar); # Camelia
verauth方法由以下人员提供:
  • Metamodel::ClassHOW (虽然那个文档页面还没有提到它们)
  • Metamodel::ModuleHOW (尽管该文档页面根本不存在)


  • 不幸的是,我不认为元对象目前提供了一种获取模块/类的源路径的方法。
    通过手动执行 use 的步骤和 require加载编译单元,您至少可以获取前缀路径(即从 $PERL6LIBuse lib-I 等位置加载它):

    my $comp-spec = CompUnit::DependencySpecification.new: short-name => 'Bar';
    my $comp-unit = $*REPO.resolve: $comp-spec;
    my $comp-repo = $comp-unit.repo;
    say $comp-repo.path-spec; # file#/home/smls/dev/lib
    say $comp-repo.prefix; # "/home/smls/dev/lib".IO
    $comp-unit CompUnit 类型的对象. $comp-repo CompUnit::Repository::FileSystem .
    两个文档页面都不存在, $*REPO list of dynamic variables 中仅简要提及.

    如果模块是正确设置的一部分 distribution ,您可以在其 META6.json 中定义的元信息( as posted by Lloyd Fournier 在您提到的邮件列表线程中):

    if try $comp-unit.distribution.meta -> %dist-meta {
    say %dist-meta<ver>;
    say %dist-meta<auth>;
    say %dist-meta<license>;
    }

    关于module - 如何找到 Perl 6 模块的版本和权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44883887/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com