当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在与程序相同的文件中声明和使用Perl6模块?》经验,为你挑选了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

阅读Perl 6"模块"文档,我没有看到任何方法来执行此操作,因为各种动词想要查看特定文件.



1> Christoph..:

子程序声明是词法,因此&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 );


请注意,设计文档不符合6.c的实际情况:`import`不支持没有明确的`&EXPORT`子的位置符号名称,只是标记为`:adverbs`
有[设计文档](http://design.perl6.org/S11.html#Importing_without_loading)和[用户文档](http://doc.perl6.org/language/modules); 对于这个特定情况,设计文档更清晰
推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有