如何在与程序相同的文件中声明和使用 Perl 6 模块?
How can I declare and use a Perl 6 module in the same file as the program?
有时我不想要多个文件,尤其是当我想保留一个可以在以后变成某些东西的好结构时。我想做这样的事情:
module Foo {
sub foo ( Int:D $number ) is export {
say "In Foo";
}
}
foo( 137 );
运行 这个,我得到一个编译错误(我认为这对于动态语言来说有点奇怪):
===SORRY!=== Error while compiling /Users/brian/Desktop/multi.pl
Undeclared routine:
foo used at line 9
正在阅读 the Perl 6 "Modules" documentation,我看不出有什么方法可以做到这一点,因为各种动词都想在特定文件中查找。
子例程声明是词法的,因此 &foo
在模块主体之外是不可见的。需要在主线代码中添加import语句使其可见:
module Foo {
sub foo ( Int:D $number ) is export { ... }
}
import Foo;
foo( 137 );
郑重声明,您也可以在主线中手动声明一个 &foo
变量并从模块中分配给该变量:
my &foo;
module Foo {
sub foo ( Int:D $number ) { ... } # no export necessary
&OUTER::foo = &foo;
}
foo( 137 );
有时我不想要多个文件,尤其是当我想保留一个可以在以后变成某些东西的好结构时。我想做这样的事情:
module Foo {
sub foo ( Int:D $number ) is export {
say "In Foo";
}
}
foo( 137 );
运行 这个,我得到一个编译错误(我认为这对于动态语言来说有点奇怪):
===SORRY!=== Error while compiling /Users/brian/Desktop/multi.pl
Undeclared routine:
foo used at line 9
正在阅读 the Perl 6 "Modules" documentation,我看不出有什么方法可以做到这一点,因为各种动词都想在特定文件中查找。
子例程声明是词法的,因此 &foo
在模块主体之外是不可见的。需要在主线代码中添加import语句使其可见:
module Foo {
sub foo ( Int:D $number ) is export { ... }
}
import Foo;
foo( 137 );
郑重声明,您也可以在主线中手动声明一个 &foo
变量并从模块中分配给该变量:
my &foo;
module Foo {
sub foo ( Int:D $number ) { ... } # no export necessary
&OUTER::foo = &foo;
}
foo( 137 );