Perl 6命名空间和模块系统

时间:2015-09-25 08:20:58

标签: perl naming-conventions perl6

我对Perl和Perl 6很陌生。而且我无法与Perl 6模块/命名空间/包系统相处。

我正在图书馆工作。假设我公司的名称是MyCompany。图书馆是"类别" Net。那我的文件层次结构应该是什么样的呢?它应该是lib/MyCompany/Net/MyLibrary.pm吗?还是lib/Net/MyLibrary.pm?或其他什么?

另外,我应该将我的类定义包装成这样的东西吗?

package MyCompany {
  class Net::MyLibrary { 

2 个答案:

答案 0 :(得分:3)

对于第一部分,::仍然是目录分隔符,因此应该通过查看CPAN或Github来清楚如何设置包。这给了关于它们做什么以及它们如何相关的类,尽管它是主观的。对于第二个问题,您在这里混合使用Perl 5和Perl6语法。在Perl6中声明类有两种方法。第一个是Perl 5中熟悉的方法(除了更具描述性的class语句);

unit class MyCompany;

unit告诉Perl 6该类将扩展到文件的末尾(就像package MyCompany;扩展到Perl 5模块中文件的末尾,或直到另一个package ..声明)。您也可以像上面一样用块声明类和角色。

class MyCompany { # so begins the MyCompany class
    method foo {
        return self;
    }

    ## ...other methods
} # the end of MyCompany

# code from other classes...

块中的所有内容都属于您声明的类。

答案 1 :(得分:2)

答案是,这取决于你。没有关于模块名称是否应包含公司名称或类别名称的规则。您可以将其称为MyLibrary,它可以正常工作

如果您正在编写大型库,或者您希望适应现有的库结构,那么您需要建立该结构并遵循其规则

如果您担心与现有CPAN模块发生冲突的名称,那么使用特殊前缀是个好主意。您的公司名称可以,因此您的所有包都将以MyCompany::开头。之后您所选择的是您的选择,但以某种方式对模块进行分类是有意义的

另一方面,如果您正在撰写要上传到符合其中方案的CPAN内容,那么您应该使用Net::HTML::,{{ 1}}等等。

因此,假设您要编写一个网络模块,以便在可能也使用CPAN中的某些模块的程序中使用。使用Math::启动名称可以保护您免受与其他软件包的冲突。然后,您可能希望MyCompany::保留您自己的类别或网络模块。然后,您需要Net::中的唯一名称,例如MyCompany::Net::,但我希望它会更具表现力

然后你的包将是MyModule,源代码将在文件MyCompany::Net::MyModule中。请注意,所有细分都应以大写字母

开头