我找不到正确访问已安装发行版资源的方法。例如,当模块动态加载时:
require ::($module);
获取其%?RESOURCES
的一种方法是要求模块具有一个可以返回此哈希值的子程序:
sub resources { %?RESOURCES }
但这会增加一些样板代码。
另一种方法是深度扫描$*REPO
并获取模块的分发元。
是否有更好的选择来完成此任务?
答案 0 :(得分:5)
一种方法是将$*REPO
(如您已经提到的)与Distribution
提供的CompUnit::Repository
对象一起使用,作为META6数据及其映射到给定数据存储区的接口/文件系统。
my $spec = CompUnit::DependencySpecification.new(:short-name<Zef>);
my $dist = $*REPO.resolve($spec).distribution;
say $dist.content("resources/$_").open.slurp for $dist.meta<resources>.list;
请注意,这目前仅适用于已安装的发行版,但不适用于https://github.com/rakudo/rakudo/pull/1812的尚未安装的发行版(例如-Ilib
)