当使用相同字母名称但使用不同符号的变量时,似乎存在一些不一致的行为:
> 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,3),but it is now 1; > say @a [1 2] > say @b [0 1] >
我不确定为什么@a不影响$a,而@b影响$b.有人可以澄清一下吗?
谢谢 !!!
lisprog
解决方法
在Rakudo Perl 6中,$b和@b之间实际上没有任何关系.
$b没有改变.它根本没有被分配你认为它被分配的东西.查看Operator Precedence上的文档,您会看到=(赋值)的优先级比逗号更严格.
此外,您正在使用REPL,它会自动打印出每个语句的返回值.该返回值可能与分配给变量的值相同,也可能不同.
我的$b = 1,3实际上是相同的
(我的$b = 1),3因为=比优先级更严格,这意味着除了第一个值之外的所有值都被忽略了
> (my $b = 1),3 (1 2 3) > $b 1
如果要为$b分配列表,请在列表周围加上括号:
> my $b = (1,3) (1 2 3) > $b (1 2 3)