Perl6 REPL поведение при печати
Когда я выполняю следующий оператор в Perl6 REPL:
my $var = 1, 2, 3;
это печатает:
(1 2 3)
Это кажется мне любопытным, потому что $var
на самом деле назначается одно целое число (т.е. $var.WHAT
возвращается (Int)
), а не List
из Int
s.
Я так понимаю, что причина того, что Int
присваивается высший приоритет оператора присваивания элемента (=
) относительно оператора запятой (,
), который оставляет ,2,3
в контексте раковины. Но почему REPL отображает List
из Int
s? А что вообще отображает REPL после выполнения оператора?
1 ответ
REPL в основном делает say (my $var = 1,2,3)
, Потому что результатом этого выражения является List
покажет как (1 2 3)
, Внутри этого выражения только первый элемент этого списка присваивается $a
следовательно, это быть Int
,
Так почему же он не предупредил об этом? Это делает, как вы указали:
$ perl6 -e 'my $a = 1,2,3'
WARNINGS for -e:
Useless use of constant integer 2 in sink context (lines 1, 1)
Useless use of constant integer 3 in sink context (lines 1, 1)
тогда как это не так:
$ perl6 -e 'say (my $a = 1,2,3)'
(1 2 3)
Причина проста: из-за say
, ,2,3
больше не находятся в контексте приемника, так как они используются say
,