gpt4 book ai didi

perl - Perl 的移位与@_ 的子程序参数赋值有区别吗?

转载 作者:行者123 更新时间:2023-12-03 15:05:32 25 4
gpt4 key购买 nike

让我们暂时忽略 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/

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