2017-08-01 55 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分配一個列表?'? –

相關問題