Доступ к ресурсам динамически загружаемого модуля - PullRequest
0 голосов
/ 11 декабря 2018

Не могу найти способ правильно получить доступ к ресурсам установленного дистрибутива.Например, когда модуль загружается динамически:

require ::($module);

Один из способов получить его %?RESOURCES - попросить модуль иметь подпрограмму, которая возвращает этот хэш:

sub resources { %?RESOURCES }

Но это добавляет дополнительный к шаблону кода.

Другим способом является глубокое сканирование $*REPO и получение метаданных модуля распространения.

Есть ли более эффективные варианты для решения этой задачи?

1 Ответ

0 голосов
/ 11 декабря 2018

Одним из способов является использование $*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;

Обратите внимание, что в настоящее время это работает только для установленных дистрибутивов, но будет работать для еще не установленных дистрибутивов (например, -Ilib) с https://github.com/rakudo/rakudo/pull/1812

...