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
1 ответ
В Rakudo Perl 6 вообще нет никакой связи между $b
а также @b
,
$b
не изменился Это просто не было назначено то, что вы думали, что было назначено. Глядя на документацию по приоритету оператора, вы увидите, что =
(назначение) имеет более жесткий приоритет, чем запятая ,
,
Кроме того, вы используете 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)