标题几乎可以总结出来,但是无论如何这是长版。
在发布一小段perl代码片段后,我被告知要避免使用间接对象表示法,“因为它有一些副作用”。注释引用了以下特定行:
my $some_object = new Some::Module(FIELD => 'value');
由于这是我一直以来的工作方式,因此为了与时俱进,我提出以下要求:
我正要问评论者,但对我而言,这是值得的。
最佳答案
主要的问题是它是模棱两可的。做
my $some_object = new Some::Module(FIELD => 'value');
是在
new
包中调用Some::Module
方法,还是在给定参数的new
包中调用Module
函数的结果调用当前包中的Some
函数?即可以将其解析为:
# method call
my $some_object = Some::Module->new(FIELD => 'value');
# or function call
my $some_object = new(Some::Module(FIELD => 'value'));
替代方法是使用显式方法调用表示法
Some::Module->new(...)
。通常,解析器会正确猜测,但是最佳实践是避免歧义。