Module 如何找到Perl6模块的版本和权限?

Module 如何找到Perl6模块的版本和权限?,module,raku,Module,Raku,在Bar.pm中,我声明了一个具有权限(作者)和版本的类: class Bar:auth<Camelia>:ver<4.8.12> { } 类栏:auth:ver{ } 如果我在程序中使用它,我如何看到我正在使用的模块的哪个版本、是谁编写的以及模块加载器是如何找到它的?与往常一样,指向文档的链接非常重要 这个问题也被问到了,但在一个令人满意的答案(或到文档的链接)出现之前就消失了 这个问题的另一个问题是,许多人没有将这些信息添加到他们的类或模块定义中。它显示在

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

class Bar:auth<Camelia>:ver<4.8.12> {
    }
类栏:auth:ver{
}
如果我在程序中使用它,我如何看到我正在使用的模块的哪个版本、是谁编写的以及模块加载器是如何找到它的?与往常一样,指向文档的链接非常重要

这个问题也被问到了,但在一个令人满意的答案(或到文档的链接)出现之前就消失了

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

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


如果模块或类是直接在源代码a la
类栏:auth:ver
中进行版本控制的,则导入该模块或类的任何代码都可以:

使用条码;
说吧v4.8.12
说吧。^auth;#茶花属
#…这是以下内容的缩写:
说吧,怎么说v4.8.12
说Bar.HOW.auth(Bar);#茶花属
ver
auth
方法由以下人员提供:

  • (尽管文档页面还没有提到它们)
  • (尽管该文档页面根本不存在)

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

my$comp spec=CompUnit::DependencySpecification.new:short name=>Bar';
my$comp unit=$*REPO.resolve:$comp spec;
my$comp repo=$comp-unit.repo;
比如$comp-repo.path-spec;#文件#/home/smls/dev/lib
说$comp-repo.prefix;#“/home/smls/dev/lib”.IO
$comp unit
是类型的对象。
$comp-repo
是一种交易方式。
这两个文档页面还不存在,而
$*REPO
仅在中简要提及


如果模块是正确设置的一部分,您可以在其
META6.json
中定义的meta-info(在您提到的邮件列表线程中):

如果尝试$comp-unit.distribution.meta->%dist-meta{
说%dist元;
说%dist元;
说%dist元;
}

“[auth]信息…显示在META.json文件中,但不显示在代码中。”:“在模块打补丁时强制更新版本…我向jnthn发送了一个pr来修复一个bug,但忘记了增加补丁级别,因此zef看不到它…如果安装到官方库中,name/ver/auth[必须]对应一个唯一的文本[或]包含一个[crypto]hash作为identity[或]git修订版的一部分……如果你不能唯一地命名“正确的”版本,那将是一场噩梦。我想更详细地探讨一下CompUnit的内容,但我认为这个答案是最好的。我想到了基本相同的东西。谢谢您能说明文档中的问题是什么吗?我想在这方面提供帮助…@jjmerlo:我想我指的是两个不完整的
元模型::
我链接到顶部附近的文档页面,以及这样一个事实,即这些信息作为一个整体不容易在文档中获得(理想情况下是在一个地方),而是必须从文档、规范、Rakudo源代码和实验中收集。