Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Module 如何通过编程判断是否安装了Perl 6模块?_Module_Raku - Fatal编程技术网

Module 如何通过编程判断是否安装了Perl 6模块?

Module 如何通过编程判断是否安装了Perl 6模块?,module,raku,Module,Raku,我在玩一个插件,可以加载可用的东西。$*REPO上的文档不太清楚,所以我猜了一下。这似乎有效,但我觉得我错过了一些更简单的东西(除了其他方面的常规高尔夫): my@modules=; my@installed=收集已安装的模块(@modules); 放置“已安装:@installed[]”; try require::(@installed[0]); #有没有更好的方法不用评估就能做到这一点 my$digest=:(@installed[0])。新建; 子安装模块(*@候选){ 对于@candi

我在玩一个插件,可以加载可用的东西。
$*REPO
上的文档不太清楚,所以我猜了一下。这似乎有效,但我觉得我错过了一些更简单的东西(除了其他方面的常规高尔夫):

my@modules=;
my@installed=收集已安装的模块(@modules);
放置“已安装:@installed[]”;
try require::(@installed[0]);
#有没有更好的方法不用评估就能做到这一点
my$digest=:(@installed[0])。新建;
子安装模块(*@候选){
对于@candidates->$module{
放入$module,'-'x 15;
my$ds=CompUnit::DependencySpecification.new:
:简称($module);
如果$*REPO.resolve:$ds{
放入“找到$module”;
以$module为例;
}
否则{
放入“未找到$module”;
}
}
}
$*REPO.resolve(CompUnit::DependencySpecification.new(:short name))
请注意,这只在一定程度上有用,因为这只会告诉您模块是否可以解析。我的意思是,它还会检测到由目录(如
-I lib
)提供的未安装模块,您将不知道它来自哪个CompUnit::Repository。您还可以grep类似于
$*REPO.REPO chain.grep(*~~CompUnit::Repository::Installable).map(*.installed.flat的结果

另外,“安装”模块的含义不是那么简单--<代码> COMPUn::存储库:可安装的库是可能隐含的,但是考虑一个第三方编译器::存储库(如)——基本上仍然安装了这些模块,但是repo本身不是可安装的。All::Installable在rakudo中的真正含义是rakudo知道如何安装它——它与rakudo知道如何查找和加载无关

一些PRs(已关闭,但我最终将重新访问)通过
方法{…}
帮助解决其中一些问题:

my @modules = <Digest::MD5 NotThere PrettyDump>;
my @installed = gather installed-modules( @modules );

put "Already installed: @installed[]";
try require ::( @installed[0] );

# is there a better way to do this without eval
my $digest = ::( @installed[0] ).new;

sub installed-modules ( *@candidates ) {
    for @candidates -> $module {
        put $module, '-' x 15;
        my $ds = CompUnit::DependencySpecification.new:
            :short-name($module);
        if $*REPO.resolve: $ds {
            put "Found $module";
            take $module;
            }
        else {
            put "Didn't find $module";
            }
        }
    }
$*REPO.resolve(CompUnit::DependencySpecification.new(:short-name<Test>))