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)
Другие вопросы по тегам