加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl的转移与@_对子程序参数的赋值有差异吗?

发布时间:2020-12-15 21:17:42 所属栏目:大数据 来源:网络整理
导读:让我们忽略Damian Conway对于任何给定的子程序不超过三个位置参数的最佳做法。 以下两个示例与性能或功能有什么区别? 使用班 sub do_something_fantastical { my $foo = shift; my $bar = shift; my $baz = shift; my $qux = shift; my $quux = shift; my $
让我们忽略Damian Conway对于任何给定的子程序不超过三个位置参数的最佳做法。

以下两个示例与性能或功能有什么区别?

使用班

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。

但是,如果我从转移开始,就像这样:

my( $param ) = shift;

我经常创建这个bug:

my( $param,$other_param ) = shift;

那是因为我不经常使用班,所以我忘了转到作业的右边,把它改成@_。这是不使用班次的最佳做法。我可以像你的例子那样为每个班次制作单独的线条,但这只是乏味的。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读