我在Perl中有两个数据结构:
数组:
my @array2 = ( "1", "2", "3");
for $elem (@array2) {
print $elem."\n";
}
Run Code Online (Sandbox Code Playgroud)
给我以下输出:
1
2
3
Run Code Online (Sandbox Code Playgroud)
还有一个清单:
my @array = [ "1", "2", "3"];
for $elem (@array) {
print $elem."\n";
}
Run Code Online (Sandbox Code Playgroud)
给出以下输出:
ARRAY(0x9c90818)
Run Code Online (Sandbox Code Playgroud)
显然,我想在两种情况下迭代元素,但为什么第二种解决方案只给我这个数组的引用?
我很好奇什么规则决定了包括超级运算符在内的表达式的类型。让我们考虑一下这四种位置:
\nmy $ca = [1, 2]; # containerized array $[1, 2]\nmy $ua := [1, 2]; # uncontanerized array [1, 2]\nmy $cl = (1, 2); # containerized list $(1, 2)\nmy $ul := (1, 2); # uncontainerized list (1, 2)\nRun Code Online (Sandbox Code Playgroud)\n我观察到,评估x \xc2\xab+\xc2\xbb y、 其中x和y取自上面,会产生一个x类型的对象(续/非续;数组/列表),例如$cl \xc2\xab+\xc2\xbb $uais $(2, 4)。
然而,该表达式0 \xc2\xab+\xc2\xbb y是 s 类型的对象y,尽管文档声称首先将左侧转换为列表。确实1 \xc2\xab+\xc2\xbb $ua如此[1, 2],尽管我也希望如此(1, 2)。
这:
my %dict;
my $counter = 0;
for ^5 -> $digit {
%dict{$digit} = ($counter,);
$counter += 1;
}
say %dict;
Run Code Online (Sandbox Code Playgroud)
给了我这个:
{0 => (5), 1 => (5), 2 => (5), 3 => (5), 4 => (5)},但我期望这个:
{0 => (0), 1 => (1), 2 => (2), 3 => (3), 4 => (4)}
分配一个裸值,一个数组或散列按我的预期工作。