我有以下项目
$ 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。但是,会发生以下情况
$ 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中,结果是相同的。
发布于 2020-03-07 00:11:28
有几个问题。
.raku结束。它们以.rakumod或.pm6结尾(目前而言)。
(从技术上讲,在安装之后,只要在META6.json中正确声明了扩展名,扩展实际上并不重要。)my),默认情况下也不导出。
因此,无法访问定义在其中的模块之外的hello()。hello作为方法调用。
即使他们有方法,他们也不会从sub关键字开始。您可以在全局范围内使用our对子例程进行范围调整。
lib/MyModule.rakumod
use v6.d;
unit module MyModule;
our sub hello () { say 'hello' }
#^
# \
# globally scopedmain.raku
use v6.d;
# use lib './lib';
use module MyModule;
MyModule::hello();
# ^^
# \
# namespace delimiter您可以将其导出:
lib/MyModule.rakumod
use v6.d;
unit MyModule;
# mark for export
# v-------v
sub hello () is export {
say 'hello'
}main.raku
use v6.d;
# use lib './lib';
use MyModule;
hello();除了is export,还有其他更细粒度的出口方式。
我会建议,如果你要出口,你也使它与our全球。这样,如果有人使用您的模块,但不想导入您的subs,他们仍然可以访问它们。
https://stackoverflow.com/questions/60537215
复制相似问题