gpt4 book ai didi

perl - 签名不啜饮

转载 作者:行者123 更新时间:2023-12-04 08:56:35 25 4
gpt4 key购买 nike

这是一个关于已经有效的代码的问题!我有很多将多个数组作为输入的子例程,例如:

use 5.24.0;
use feature 'refaliasing';
no warnings "experimental::refaliasing";
my (@foo,@bar,@baz);
sub sumarr (\@\@);

# other code to load arrays

sub sumarr (\@\@)
{ my (@sum, @aa, @ab);
(\@aa,\@ab)=@_;
$sum[$_] = $aa[$_] + $ab[$_] for 0 .. $#aa;
return @sum;
}
...我可以简单地调用
@baz = sumarr( @foo, @bar);
我还没有找到任何方法来用签名替换原型(prototype),或者至少用签名来扩充原型(prototype)以简化参数列表。有什么可以做到的吗?

最佳答案

签名解包@_进入函数范围内的词法变量。原型(prototype)会影响函数调用的解析方式。所以他们做不同的事情——你不能只是用另一个代替。 (您可以编写一个同时具有两者的函数。)
影响解析的原型(prototype)的图示。

use strict;
use warnings;
use Data::Dumper;

my @a = ( 1 );
my @b = ( 2 );

myfunc( @a, @b );

sub myfunc (\@\@) {
print Dumper( @_ );
}

myfunc( @a, @b );
请注意 myfunc使用相同的参数调用两次,但产生不同的输出。与 use warnings , Perl 至少会警告你你正在做一些可能很奇怪的事情。
正如我所提到的,可以为同一个函数同时声明签名和原型(prototype)。
sub myfunc ( $A, $B ) :prototype(\@\@) {
print Dumper( @_ );
}
(签名仍然是实验性的,我相信他们最近确实改变了声明签名和原型(prototype)的顺序!提防实验性功能的理由。)
TLDR:你不能用签名替换原型(prototype),因为它们是不同的东西。

关于perl - 签名不啜饮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63795627/

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