gpt4 book ai didi

带括号和不带括号的 Perl 调用方法

转载 作者:行者123 更新时间:2023-12-04 22:12:07 29 4
gpt4 key购买 nike

一些 Perl 书籍建议在调用类方法时使用括号,称这有助于使解析器不必猜测代码的意图。然而,我见过的几乎所有 Perl 代码(包括 cpan 上的模块)在调用不带参数的方法时很少使用括号。

省略这些括号是正常的还是我应该总是输入它们。

我编写了一个小测试代码来测量调用带括号和不带括号的方法之间的差异,它确实显示了一个只有两个方法的类在 1% 和 2% 之间的微小差异。我想如果类(class)很大,这可能会提高。

这是我用来基准测试的测试脚本:

#!/usr/bin/perl

use Benchmark qw(:all);

{
package Messages;

sub new {
my ($self) = @_;
return bless {}, $self;
}

sub message {
my ($self) = @_;
return "Hello world";
}

sub another {
my ($self) = @_;
return "Another Hello world";
}
}

my $class = Messages->new();

cmpthese(10_000_000, {
'with () ' => sub { $class->message() },
'without () ' => sub { $class->message },
});

这是基准测试的结果:
                 Rate       without ()       with ()    
without () 3320053/s -- -1%
with () 3338898/s 1% --

我想如果应用程序使用数百个模块并且每个模块都有数百个不带括号调用的方法,这是否会增加很多速度差异?

如果是这样,为什么每个人都在没有括号的情况下编码?

最佳答案

1% 的差异是系统噪声。两个版本都编译为完全相同的字节码,因此它们之间不会存在系统差异。使用使您的代码更易于阅读的任何变体。

如果你想看看它编译成什么,你可以这样做:

perl -MO=Concise -E '$foo->bar()'

关于带括号和不带括号的 Perl 调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25523983/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com