加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何以编程方式告诉我是否安装了Perl 6模块?

发布时间:2020-12-15 21:48:31 所属栏目:大数据 来源:网络整理
导读:我正在玩一个可以加载可用内容的插件.关于$* REPO的文档并不完全存在,所以我猜了一下.这似乎有效,但我感觉我错过了一些更简单的东西(除了常规打高尔夫球的其他位): my @modules = Digest::MD5 NotThere PrettyDump;my @installed = gather installed-module
我正在玩一个可以加载可用内容的插件.关于$* REPO的文档并不完全存在,所以我猜了一下.这似乎有效,但我感觉我错过了一些更简单的东西(除了常规打高尔夫球的其他位):
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>))

请注意,这仅在某种程度上有用,因为这只会告诉您是否可以解析模块.我的意思是它还会检测由-I lib等目录提供的未安装模块,并且您将不知道它来自哪个CompUnit :: Repository.你也可以grep $* REPO.repo-chain.grep(* ~~ CompUnit :: Repository :: Installable).map(*.installed).flat之类的结果

另外“安装”模块的含义并不那么简单 – CompUnit :: Repository :: Installable存储库是可能隐含的,但考虑第三方CompUnit ::存储库(例如https://github.com/ugexe/Perl6-CompUnit–Repository–Tar) – 这个模块本质上是仍然安装,但repo本身不是CompUnit :: Repository :: Installable.所有:: Installable真的意味着rakudo是rakudo知道如何安装它 – 它与rakudo知道如何查找和加载无关

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

https://github.com/rakudo/rakudo/pull/1125

https://github.com/rakudo/rakudo/pull/1132

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读