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; 那是因为我不经常使用班,所以我忘了转到作业的右边,把它改成@_。这是不使用班次的最佳做法。我可以像你的例子那样为每个班次制作单独的线条,但这只是乏味的。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |