4

当使用相同字母名称但不同符号的变量时,似乎存在一些不一致的行为:

> my $a="foo";
foo
> my @a=1,2
[1 2]
> say $a
foo               # this is what I have expected
> my $b = 1,2,3
(1 2 3)
> my @b = (0, $b.Slip)
[0 1]             # I expect to get [0 1 2 3]; (0, |$b) not work either
> say $b
1                 # I expect $b to be unchanged, (1,2,3), but it is now 1;
> say @a
[1 2]
> say @b
[0 1]
>

我不确定为什么@a不影响$a,而@b影响$b。有人可以解释一下吗?

谢谢 !!!

lisprog

4

1 回答 1

6

$b在 Rakudo Perl 6 中,和之间实际上根本没有关系@b

$b没有改变。它根本没有被分配到您认为已分配的内容。查看有关Operator Precedence的文档,您会发现=(assignment) 的优先级比逗号更严格,

此外,您正在使用 REPL,它会自动打印出每个语句的返回值。该返回值可能与分配给变量的值相同,也可能不同。

my $b = 1,2,3实际上与
(my $b = 1),2,3因为=具有比 更严格的优先级相同,,这意味着实际上除了第一个值之外的所有值都被忽略

> (my $b = 1),2,3
(1 2 3)
> $b
1

如果要将列表分配给$b,请在列表周围加上括号:

> my $b = (1,2,3)
(1 2 3)
> $b
(1 2 3)
于 2017-08-01T18:01:36.803 回答