Perl6 REPL поведение при печати

Когда я выполняю следующий оператор в Perl6 REPL:

my $var = 1, 2, 3;

это печатает:

(1 2 3)

Это кажется мне любопытным, потому что $var на самом деле назначается одно целое число (т.е. $var.WHAT возвращается (Int)), а не List из Ints.

Я так понимаю, что причина того, что Int присваивается высший приоритет оператора присваивания элемента (=) относительно оператора запятой (,), который оставляет ,2,3 в контексте раковины. Но почему REPL отображает List из Ints? А что вообще отображает 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,

Другие вопросы по тегам