让我们暂时忽略 Damian Conway 对于任何给定子程序不超过三个位置参数的最佳实践。
下面的两个示例在性能或功能方面有什么区别吗?
使用 shift
:
sub do_something_fantastical {
my $foo = shift;
my $bar = shift;
my $baz = shift;
my $qux = shift;
my $quux = shift;
my $corge = shift;
}
使用
@_
:sub do_something_fantastical {
my ($foo, $bar, $baz, $qux, $quux, $corge) = @_;
}
假设两个示例在性能和功能方面都相同,那么人们对一种格式有何看法?显然使用
@_
的例子是更少的代码行,但使用 shift
不是更清晰吗?如另一个示例所示?欢迎有充分理由的意见。
最佳答案
有功能上的区别。 shift修改 @_
,以及来自 @_
的分配才不是。如果您不需要使用 @_
之后,这种差异对您来说可能无关紧要。我尝试总是使用列表分配,但有时我会使用 shift
.
但是,如果我从 shift
开始,像这样:
my( $param ) = shift;
我经常创建这个错误:
my( $param, $other_param ) = shift;
那是因为我不使用
shift
经常这样,所以我忘记了到作业的右侧将其更改为 @_
.这就是不使用 shift
的最佳实践的要点。 .我可以为每个 shift
制作单独的行正如您在示例中所做的那样,但这很乏味。
关于perl - Perl 的移位与@_ 的子程序参数赋值有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/415297/