2017-08-01 57 views
4

似乎有一些不一致的行为时相同字母名称的变量,但不同的印记被使用:Perl 6的变量相同名称的不同印记不一致的行为

> 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

回答

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) 
+0

非常感谢Christopher!我现在得到它了,滑动也起作用了!谢谢 ! – lisprogtor

+2

有人可能会争辩说''我的$ b = 1,2,3''应该警告在地板上放下数值'2'和'3'。 –

+2

@ElizabethMattijsen这样的警告应该像'无用的使用常量在汇的上下文。你是否想给Scalar分配一个列表?'? –

相关问题