2017-08-01 10 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に影響します。誰かが解明してくれますか?

ありがとうございました! Rakudo Perl 6ので

答えて

6

lisprog

$b@bの間に全く関係が実際に存在しません。

$bは変更されませんでした。割り当てられたと思ったものが割り当てられなかっただけです。 Operator Precedenceのドキュメントを見ると、=(割り当て)がカンマ,よりも厳しい優先順位を持つことがわかります。

また、REPLを使用しているため、各文の戻り値が自動的に出力されます。その戻り値は、変数に割り当てられた値と同じでも異なっていてもかまいません。 =が効果的にすべてが、最初の値は、あなたが$bにリストを割り当てたい場合は、入れ

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

を無視していることを意味し、,より緊密な優先度を持っているので

my $b = 1,2,3は実際に
(my $b = 1),2,3と同じですリストの周りの括弧:

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

ありがとう、クリストファー!私は今それを得て、スリップも動作します!ありがとう! – lisprogtor

+2

'my $ b = 1,2,3'は、フロアに値' 2'と '3'を落とすことについて警告する必要があります。 –

+2

@ElizabethMattijsenこの警告は、「シンクのコンテキストでの無用な定数の使用」のようなものになりますか? Scalarにリストを割り当てることを意味しましたか? –

関連する問題