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