滑动哈希和slurpy自动变量的默认值

问题描述 投票:4回答:1

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

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

当滑入sub %hash时,输入test的默认值将丢失。单据中是否可以使用默认值?干杯

perl6
1个回答
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',因为这不太可能作为任何哈希的正常密钥出现,因为它有理由承担意外密钥冲突的理论风险。

© www.soinside.com 2019 - 2024. All rights reserved.