my %hash is default(222)=(a=>0,b=>111);
sub test {say %_.default}; #using automatic parameter
test |%hash; #outputs (Any)
Скольжение по определению означает превращение контейнера в список его элементов. То есть вы передаете не хеш, а его содержимое.
%_
собирает копий переданных именованных аргументов. Это локальный хеш для блока, в котором он не имеет отношения к хешу, используемому для вставки аргументов. По умолчанию используется значение по умолчанию, равное Any
, точно так же, как с объявленным хешем my
:
my %foo;
say %foo.default; # (Any)
Существует ли метод передачи значения по умолчанию хеша при переходе к дополнительному вызову?
Вы можете сделать это:
my %hash is default(222)=(a=>0,b=>111);
sub test {say %_<hash-default-for-test>}
test |%hash, :hash-default-for-test(%hash.default); #outputs 222
Я выбрал строку ключа 'hash-default-for-test', потому что вряд ли этого достаточно, чтобы он использовался в качестве обычного ключа для любого хэша, в котором разумно брать теоретический риск случайного столкновения ключей.