让我们说一个文件中有一个父Perl类:
#!/usr/bin/perl package Foo; use strict; use warnings; use Data::Dumper; sub new{ my $class = shift; my %self = (); return bless %self,$class; } 1;
和一个不同文件中的子类:
#!/usr/bin/perl package Bar; use base "Foo"; 1;
子类将继承父级的使用语句吗?我知道新的方法将被继承.
解决方法
啊,好问题!
Will the subclass inherit the use statements from the parent?
这取决于你的意思是继承.到最后我不会作任何假设,但答案也许是这样.你看,perl混合了类和命名空间的想法 – 一个包是一个可以描述它们的术语.现在的问题是语句使用它所做的就是强制一个包的包装,并调用目标import()sub.这意味着它本质上可以无限制地控制你的包 – 并且通过你的类.
现在,将perl与perl中的所有方法相结合,只不过是通过惯例将$self作为第一个参数,而是留给perl5.对于那些知道如何使用它的人来说,这是一个巨大的上升空间.虽然严格是一个词汇语法,麋鹿呢?
package BigMooseUser; use Moose; package BabyMooseUser; our @ISA = 'BigMooseUser'; package Foo; my $b = BabyMooseUser->new; print $b->Meta->name;
现在,BabyMooseUser从哪里获取构造函数(new)?从哪里获得元类?所有这一切都是从单次使用的Moose;在父类(namespace)中.所以
Will the subclass inherit the use statements from the parent?
那么这里,在我们的例子中,如果使用语句的效果是添加方法,那肯定是.
这个问题很深入,它取决于你是否在谈论pragmas,还是更晦涩的对象框架或者程序模块.如果你想减轻一个父母的命名空间,可以在OO范例中看到namespace::autoclean
.