【发布时间】:2014-12-07 17:26:41
【问题描述】:
许多年前,我记得一位程序员同事这样建议:
new Some::Class; # bad! (but why?)
Some::Class->new(); # good!
可悲的是,现在我不记得/他的原因了。 :( 即使构造函数实际上并不存在于 Some::Class 模块中,而是从某处的父级继承,这两种形式都可以正常工作。
这两种形式都与 Some::Class::new() 不同,后者不会将类的名称作为第一个参数传递给构造函数——所以这种形式总是不正确的。
即使这两种形式是等价的,我发现 Some::Class->new() 更清楚,因为它遵循在模块上调用方法的标准约定,而在 perl 中,'new'方法并不特殊——构造函数可以被调用任何东西,而 new() 可以做任何事情(当然我们通常期望它是构造函数)。
【问题讨论】:
-
另一个优秀的参考:Indirect but still fatal