Module 使用完全限定名调用模块子例程
我创建了一个简单的测试模块/code>/mods/My/module.pm6:Module 使用完全限定名调用模块子例程,module,raku,Module,Raku,我创建了一个简单的测试模块/code>/mods/My/module.pm6: unit module My::Module; use v6; sub hello () is export { say "Hello"; } #! /usr/bin/env perl6 use v6; use My::Module; My::Module::hello(); 然后,我有一个测试脚本/p.p6: unit module My::Module; use v6; sub hello (
unit module My::Module;
use v6;
sub hello () is export {
say "Hello";
}
#! /usr/bin/env perl6
use v6;
use My::Module;
My::Module::hello();
然后,我有一个测试脚本/p.p6
:
unit module My::Module;
use v6;
sub hello () is export {
say "Hello";
}
#! /usr/bin/env perl6
use v6;
use My::Module;
My::Module::hello();
然后我将PERL6LIB
设置为包含文件夹/mods
,然后运行脚本:
$ ./p.p6
Could not find symbol '&hello'
in block <unit> at ./p.p6 line 7
$。/p.p6
找不到符号“&hello”
在块中。/p.p6第7行
但是,如果我将脚本中的行
My::Module::hello()
替换为hello()
,它就可以正常工作。我在这里遗漏了什么?如果您导出hello,您只需使用它即可
use v6;
use lib <lib>; # hint: no need to tinker with the environment
use My::Module;
hello();
可能是因为默认情况下,
sub
s是my
,因此外部世界看不到它们的全名。即使它们是出口的?比较class A{sub B(){say“B”};A::B()
和类A{our sub B(){say“B”};A::B()
@ElizabethMattijsen似乎就是这样!将模块中的声明更改为我们的子hello()…
似乎可以解决问题。。