Я собирался отредактировать это в моем другом связанном вопросе, но он чувствует себя по-другому, и я не хочу задавать слишком много вопросов на вопрос.
Мой разум... взорвался.
Рассмотрим:
use strict;
my Int $n = 6;
my Str $x = "a";
my @l = $n, $x;
say @l ~~ List;
Печать True
, как и ожидалось.
Рассмотрим, что:
use strict;
my Int $n = 6;
my Str $x = "a";
my List @l = $n, $x; # <-- only change is the type notation
say @l ~~ List;
Что умирает с:
Type check failed in assignment to @l; expected List but got Int
Итак... тип List is List, но я не могу сказать его List, потому что это грех!
Что здесь происходит? Это ошибка? Или я приношу свои неулокальные Python и Go идиомы в Perl и нарушающие вещи?