是否有一种技术可以在进入子调用时传递哈希的默认值?
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
的默认值将丢失。发票中是否可以包含默认值?干杯
答案 0 :(得分:6)
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',因为对于任何合理地承担理论上意外键冲突风险的哈希,它不太可能作为普通键出现。