What is the proper way to load Raku modules using rakudo-star?
我有以下项目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | $ 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(); |
我想使用最新的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | $ 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# |
我也尝试在 main.raku 中的
有几个问题。
模块不以
(从技术上讲,安装后,只要您在
默认情况下(
所以没有办法在它定义的模块之外访问
模块没有方法,因此您不能将
即使他们确实有方法,他们也不会以
你可以用
全局作用域子程序
1 2 3 4 5 6 7 | use v6.d; unit module MyModule; our sub hello () { say 'hello' } #^ # \\ # globally scoped |
1 2 3 4 5 6 7 8 | use v6.d; # use lib './lib'; use module MyModule; MyModule::hello(); # ^^ # \\ # namespace delimiter |
您可以改为导出它:
1 2 3 4 5 6 7 8 | use v6.d; unit MyModule; # mark for export # v-------v sub hello () is export { say 'hello' } |
1 2 3 4 5 | use v6.d; # use lib './lib'; use MyModule; hello(); |
除了
如果您要导出,我建议您也使用
新的 Raku 版本使用