首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Raku星型加载Raku模块的正确方法是什么?

使用Raku星型加载Raku模块的正确方法是什么?
EN

Stack Overflow用户
提问于 2020-03-05 01:59:38
回答 2查看 521关注 0票数 8

我有以下项目

代码语言:javascript
复制
$ tree
.
├── lib
│   └── MyModule.raku
└── main.raku

$ cat lib/MyModule.raku
use v6;
unit module MyModule;
sub hello { say 'hello' }

$ cat lib/main.raku
use v6;
use MyModule;
MyModule.hello();

我想使用最新的rakudo-star 图像运行rakudo-star。但是,会发生以下情况

代码语言:javascript
复制
$ docker run -i --rm -u $(id -u) \
--workdir /work \
--volume  $PWD:/work \
--entrypoint bash \
rakudo-star perl6 -I ./lib main.raku
===SORRY!===
Could not find MyModule at line 3 in:
    file#/work/lib
    inst#/.perl6
    inst#/usr/share/perl6/site
    inst#/usr/share/perl6/vendor
    inst#/usr/share/perl6
    ap#
    nqp#
    perl5#

我还尝试将use lib '/work/lib'插入到use MyModule之前的main.raku中,结果是相同的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-07 00:11:28

有几个问题。

  1. 模块不会以.raku结束。它们以.rakumod.pm6结尾(目前而言)。 (从技术上讲,在安装之后,只要在META6.json中正确声明了扩展名,扩展实际上并不重要。)
  2. 子例程在默认情况下是词汇作用域(my),默认情况下也不导出。 因此,无法访问定义在其中的模块之外的hello()
  3. 模块没有方法,因此不能将hello作为方法调用。 即使他们有方法,他们也不会从sub关键字开始。

您可以在全局范围内使用our对子例程进行范围调整。

lib/MyModule.rakumod

代码语言:javascript
复制
use v6.d;
unit module MyModule;

our sub hello () { say 'hello' }
#^
# \
#  globally scoped

main.raku

代码语言:javascript
复制
use v6.d;
# use lib './lib';
use module MyModule;

MyModule::hello();
#       ^^
#        \
#         namespace delimiter

您可以将其导出:

lib/MyModule.rakumod

代码语言:javascript
复制
use v6.d;
unit MyModule;

#             mark for export
#            v-------v
sub hello () is export {
    say 'hello'
}

main.raku

代码语言:javascript
复制
use v6.d;
# use lib './lib';
use MyModule;

hello();

除了is export,还有其他更细粒度的出口方式

我会建议,如果你要出口,你也使它与our全球。这样,如果有人使用您的模块,但不想导入您的subs,他们仍然可以访问它们。

票数 5
EN

Stack Overflow用户

发布于 2020-03-05 05:08:56

新的Raku版本使用.rakumod作为模块的文件扩展名。仍然支持较旧的.pm6扩展。有关新文件扩展名的更多信息可以在拉库之路票证中找到。有关模块的更多信息可在raku文件中获得。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60537215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档