Значения по умолчанию для искаженных хэшей и автоматических переменных slurpy

#raku

#raku

Вопрос:

Существует ли метод передачи значения хэша по умолчанию при вводе во вспомогательный вызов?

 my %hash is default(222)=(a=>0,b=>111);

sub test {say %_.default};   #using automatic parameter

sub test2(%h) {say %h.default};   #explicit position parameter

test |%hash;  #outputs (Any)

test2 %hash   #outputs 222
  

Значение по умолчанию для ввода %hash теряется при ускользании во вложенный файл test . Возможно ли установить значение по умолчанию в сбросе? Приветствия

Ответ №1:

 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.defau< # (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’, потому что это маловероятно настолько, чтобы быть обычным ключом для любого хэша, что разумно принять теоретический риск случайного столкновения ключей.