2009-09-01 74 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