2009-09-01 73 views
1

我能有這樣一個構造函數:這是對Perl構造函數調用的等效函數調用嗎?

sub create { 
    my $class = shift; 
    my $self = {}; 
    return bless $self,$class; 
} 

,當我創建一個對象,我可以這樣寫:

my $object = create Object; 

是這樣的:

my $object = Object::create("Object"); 

只相當於該構造函數調用?

+1

您不必使用'

$object
'只需在代碼塊前面放四個空格,或者更好的選擇它,然後按**'[Ctrl]'** + **'[K]' **。 – 2009-09-01 21:04:36

+2

使用'new'作爲構造函數的名稱是一個非常普遍的約定。是的,你可以稱它爲「chew_toenail_clippings」,如果你願意,它可以工作,但這很難記憶(如果有點嚴重)。此外,您可能希望研究Moose(http://moose.perl.org/),它是一個非常強大的面向Perl的面向對象系統,可以幫助您節省大量冗餘代碼(請參閱「不加糖的」示例:http:/ /search.cpan.org/dist/Moose/lib/Moose/Manual/Unsweetened.pod) – daotoad 2009-09-01 23:20:24

回答

5

沒有,等效通話

my $object = Object->create(); 

如果使用create功能的完全合格的名字沒有箭頭的語法,你不打算通過Perl的面向對象的方法分派,因此任何繼承的方法將不行。

箭頭語法優於「間接」create Object語法。有關原因,請參閱this question

+0

你能告訴我所有的同等電話嗎?我不關心每個人的副作用,只是語法。 – Geo 2009-09-01 20:49:28

+0

間接'新對象'和箭頭語法'對象 - >新'是等價的,除了我用間接形式提到的語法歧義問題。在另一個包中調用函數的唯一方法是使用完全限定的名稱,例如'Object :: new()'的行爲與在當前包中調用'new()'完全相同。 – friedo 2009-09-01 22:41:06