如果你的所有構造函數做的是調用父類的構造(如在你的榜樣,你不需要寫一個都簡單地離開它和家長會叫,你只需要確保的對象是有福到正確的類型:
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