如果你的所有构造函数做的是调用父类的构造(如在你的榜样,你不需要写一个都简单地离开它和家长会叫,你只需要确保的对象是有福到正确的类型:
package Parent;
use strict;
use warnings;
sub new
{
my ($class, @args) = @_;
# do something with @args
return bless {}, $class;
}
1;
如果使用上面的代码,并与use parent 'Parent';
宣布Child
类,则父类的构造将正常构造一个孩子
。
如果你需要在孩子添加一些属性,然后你有什么在很大程度上是正确的:
package Child;
use strict;
use warnings;
use parent 'Parent';
sub new
{
my ($class, @args) = @_;
# possibly call Parent->new(@args) first
my $self = $class->SUPER::new(@args);
# do something else with @args
# no need to rebless $self, if the Parent already blessed properly
return $self;
}
1;
但是,当你把多重继承混进去,你需要决定正确的事情的每一步做的方式。这意味着每个类的自定义构造函数决定如何将Parent1和Parent2的属性合并到子级中,然后最终将生成的对象加入到Child类中。这种并发症是多重继承是一个糟糕的设计选择的原因之一。你有没有考虑重新设计你的对象层次,可能是通过将一些属性转换为角色?此外,您可能希望使用对象框架来取出一些繁忙的工作,如Moose。现在很少需要编写自定义构造函数。
(最后,你应该避免使用变量$a
和$b
,他们的处理方式不同在Perl,因为他们在排序函数中使用的变量和其他一些内置插件。)
谢谢,这似乎是我当前的代码转换成一些作品的最简单的方法。 – Zitrax 2011-03-10 15:32:25