gpt4 book ai didi

arrays - Perl 数组与列表

转载 作者:行者123 更新时间:2023-12-03 07:06:33 24 4
gpt4 key购买 nike

我在 Perl 中有两个数据结构:

数组:

my @array2 = ( "1", "2", "3");

for $elem (@array2) {
print $elem."\n";
}

给我以下输出:

1
2
3

还有一个列表:

my @array = [ "1", "2", "3"];                                            

for $elem (@array) {
print $elem."\n";
}

给出以下输出:

ARRAY(0x9c90818)

显然,我想迭代这两种情况下的元素,但为什么第二个解决方案只给我这个数组的引用?

最佳答案

Perl 中的列表不是数据结构,它们是源代码中的位置,由它们周围的上下文决定。列表基本上是 Perl 用于移动数据的 transient 结构。您可以使用 Perl 的所有语法与它们交互,但不能将它们作为数据类型使用。最接近列表的数据类型是数组。

my @var    =    (1, 2, 3);  # parens needed for precedence, they do not create a list
^ an array ^ a list

say 1, 2, 3;
^ a list

say @var;
^ a list (of one array, which will expand into 3 values before `say` is called)

当您编写[1, 2, 3]时,您正在做的是创建一个标量数组引用。该数组引用使用列表 1, 2, 3 进行初始化,这与创建命名数组并引用它相同:

[1, 2, 3]   ~~   do {my @x = (1, 2, 3); \@x}

由于 [...] 构造创建了一个标量,因此您应该将其保存在标量中:

my $array = [1, 2, 3];                                            

for my $elem (@$array) { # lexical loop variable
print $elem."\n";
}

由于您想要操作整个数组,而不仅仅是引用,因此您可以在 $array 前面放置一个 @ ,这会取消对存储的数组引用的引用。

关于arrays - Perl 数组与列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6023821/

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