散列哈希值和粗俗的自动变量的默认值

drc*_*law 4 perl6

当滑入子调用时,是否有一种技术可以传递哈希的默认值?

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
Run Code Online (Sandbox Code Playgroud)

%hash滑入sub时,输入的默认值将丢失test。发票中是否可以包含默认值?干杯

rai*_*iph 6

my %hash is default(222)=(a=>0,b=>111);
sub test {say %_.default};   #using automatic parameter
test |%hash;  #outputs (Any)
Run Code Online (Sandbox Code Playgroud)

按定义滑动意味着将容器变成其元素列表。因此,您不是在传递哈希,而是传递其内容。

%_收集传递的命名参数的副本。它是其所在块的局部哈希,与用于插入参数的哈希没有关系。它的默认值是默认默认值,Any就像my声明的哈希值一样:

my %foo;
say %foo.default; # (Any)
Run Code Online (Sandbox Code Playgroud)

当滑入子调用时,是否有一种技术可以传递哈希的默认值?

您可以这样做:

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
Run Code Online (Sandbox Code Playgroud)

我选择了键字符串'hash-default-for-test',因为对于任何合理认为冒意外键冲突风险的散列,它不太可能作为普通键出现。