perl 6变量同名不同的sigils不一致行为

时间:2017-08-01 17:17:20

标签: variables perl6 sigils

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

> 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

1 个答案:

答案 0 :(得分:6)

在Rakudo Perl 6中,$b@b之间实际上没有任何关系。

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

此外,您正在使用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)