在 Bar.pm 中,我声明了一个具有权限(作者)和版本的类:
class Bar:auth<Camelia>:ver<4.8.12> {
}
如果我在程序中使用它,我如何查看我正在使用的模块版本,编写者以及模块加载程序如何找到它?与往常一样,文档链接很重要。
此问题也在perl6-users上提出,但在出现满意答案(或文档链接)之前就已经死了。
这个问题的另一个问题是许多人没有将这些信息添加到他们的类或模块定义中。它显示在 META.json 文件中,但不显示在代码中。
答案 0 :(得分:12)
(可能不是一个令人满意的答案,因为事情的事实不是很令人满意,特别是关于文档的状态,但在这里......)
如果模块或类直接在源代码àlaclass 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
ver
和auth
方法由以下人员提供:
Metamodel::ClassHOW
(虽然该文档页面尚未提及) Metamodel::ModuleHOW
(虽然该文档页面根本不存在) 不幸的是,我不认为元对象目前提供了一种获取模块/类的源路径的方法。
通过手动执行use
和require
加载编译单元的步骤,您至少可以获得前缀路径(即$PERL6LIB
或{{1}的位置或者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;
say $comp-repo.path-spec; # file#/home/smls/dev/lib
say $comp-repo.prefix; # "/home/smls/dev/lib".IO
是CompUnit
类型的对象
$comp-unit
是CompUnit::Repository::FileSystem
两个文档页面尚不存在,$comp-repo
仅在list of dynamic variables中简要提及。
如果模块是正确设置distribution的一部分,您可以获取邮件列表主题中$*REPO
(as posted by Lloyd Fournier中定义的元信息你提到过):
META6.json