我如何在与程序相同的文件中声明和使用Perl 6模块?

问题描述 投票:6回答:1

有时,我不希望有多个文件,尤其是当我在想保持一个不错的结构,以后可以将其转换为某种东西时。我想做这样的事情:

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,由于各种动词都希望在特定文件中查找,因此我看不到任何方法。

module perl6 raku
1个回答
7
投票

子例程声明是词法的,因此&foo在模块主体外部不可见。您需要在主线代码中添加导入语句以使其可见:

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 );
© www.soinside.com 2019 - 2024. All rights reserved.