标题几乎可以总结出来,但是无论如何这是长版。

在发布一小段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(...)

    通常,解析器会正确猜测,但是最佳实践是避免歧义。

    10-08 05:37
    查看更多