jac*_*ack 1 perl perl-data-structures
传递给函数时如何取消引用数组?
我是这样做的:
my @a = {\@array1, \@array2, \@array3};
func(\@a);
func{
@b = @_;
@c = @{@b};
}
Run Code Online (Sandbox Code Playgroud)
其实我想要的数组@c应包含的地址@array1,@array2和@array3.
my @a = {\@array1, \@array2, \@array3};
Run Code Online (Sandbox Code Playgroud)
以上是一个包含单个成员的数组 - >一个包含以下内容的哈希:
{ ''.\@array1 => \@array2, ''.\@array3 => undef }
Run Code Online (Sandbox Code Playgroud)
因为作为哈希中的键,Perl将引用强制@array1转换为字符串.并且Perl允许将标量散列引用分配给数组,因为"理解"您希望数组的第一个元素是您为其分配的标量.
您创建一个数组数组,如下所示:
my @a = (\@array1, \@array2, \@array3);
Run Code Online (Sandbox Code Playgroud)
然后在你的函数中你将解压缩它们,如下所示:
sub func {
my $ref = shift;
foreach my $arr ( @$ref ) {
my @list_of_values = @$arr;
}
}
Run Code Online (Sandbox Code Playgroud)
或者其中的一些变体,比如说地图将是最简单的表达:
my @list_of_entries = map { @$_ } @$ref;
Run Code Online (Sandbox Code Playgroud)
在您的示例中,@c因为地址列表与正确构造的地址完全相同@a.
您可能需要阅读perldoc perlreftut,perldoc perlref和perldoc perldsc 你可以说:
sub func {
my $arrayref = shift;
for my $aref (@$arrayref) {
print join(", ", @$aref), "\n";
}
}
my @array1 = (1, 2, 3);
my @array2 = (4, 5, 6);
my @array3 = (7, 8, 9);
my @a = \(@array1, @array2, @array3);
func \@a;
Run Code Online (Sandbox Code Playgroud)
或者更紧凑:
sub func {
my $arrayref = shift;
for my $aref (@$arrayref) {
print join(", ", @$aref), "\n";
}
}
func [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4238 次 |
| 最近记录: |