foo ,= bar
- это сокращение от
foo = foo, bar
Таким образом,
@a ,= 3
- это сокращение от:
@a = @a, 3;
Во время рефакторинга Большого списка в 2015 году, правило единственного аргумента стало активным везде. Так как правая часть выражения не один аргумент, @a
в правой части не будет сплющен.
Так эффективно, вы создаете самоссылочный массив, в котором первый элемент ссылается на себя (это то, что say
пытается вам сказать).
По причинам, о которых я больше не понимаю, То же самое не применяется к объектам, выполняющим ассоциативную роль. Таким образом, в этом случае %a
действительно сглаживается, добавляя тем самым данное Pair
к Ха sh.
my %a = :11a, :22b;
%a = %a, :33x;
say %a # OUTPUT: «{a => 11, b => 22, x => 33}»
Чтобы вернуться к вашему вопросу: в в случае с массивом, я не думаю, что есть много смысла для операции ,=
. До Великого Рефактора Списка, он мог сделать то, что вы ожидали. Но это было бы несовместимо с другими ситуациями, и согласованность считалась более важной (потому что до Великого Списка Факторов, когда что-то сглаживалось, а когда нет, было довольно произвольно и много раз источником WAT вместо DWIM).