如何调用Raku中List的map方法传入Hash参数?
在Raku中正确调用List.map(Hash)的方式
直接调用(1,2,3).map(%hash)报错是因为Raku默认会将map的参数识别为Callable类型(如代码块、子例程),而Hash本身不属于Callable,因此触发Cannot map a List using a Hash错误。要正确触发接受Hash的多方法,有以下几种简洁方式:
方式1:将Hash转换为Callable
使用&%hash语法把Hash转为Callable,它会在处理列表元素时返回对应键的值:
my %hash = 1 => 'a', 2 => 'b', 3 => 'c'; my @result = (1,2,3).map(&%hash); say @result; # 输出 (a b c)
如果列表元素不存在于Hash中,会返回Any,可通过//添加默认值:
my @result = (1,4,3).map({%hash{$_} // 'default'}); say @result; # 输出 (a default c)
方式2:使用冒号调用语法
用: 替代括号传递参数,让编译器正确匹配接受Hash的多方法:
my %hash = 1 => 'a', 2 => 'b', 3 => 'c'; my @result = (1,2,3).map: %hash; say @result; # 输出 (a b c)
方式3:显式指定参数类型(不推荐,冗余)
通过显式声明参数类型来匹配对应多方法,写法较繁琐:
my %hash = 1 => 'a', 2 => 'b', 3 => 'c'; my @result = (1,2,3).map(Hash:D, %hash); say @result; # 输出 (a b c)
内容的提问来源于stack exchange,提问作者7stud
相关产品推荐
相关产品推荐

