将Str元素添加到声明为state %set is SetHash[Str]在循环内的SetHash中会引发异常:
无法解析调用方STORE(SetHash [Str]:U:SetHash [Str]:D); 这些签名都不匹配:
(SetHash:D:* @ pairs,*%_-> SetHash:D)
(SetHash:D:\ objects,\ bools,*%_-> SetHash:D)
(QuantHash:D:|)
当在循环之前声明为my %set is SetHash[Str]相同的代码就可以了。
根据https://docs.raku.org/type/SetHash#Creating_SetHash_objects:
...
从6.d(2019.03及更高版本)开始,还可以指定要在SetHash中允许的值的类型。
这可以在调用.new时完成:
#only allow Pairs
my $n = SetHash[Pair].new: "zero" => 0, "one" => 1, "two" => 2;或使用伪装语法:
#only allow strings
my %sh is SetHash[Str] = <a b c>;
say %sh<a>; # True
say %sh<d>; # False...
当声明HashSet前一种方法(%set = SetHash[Str].new)时,它按预期方式工作(在循环之前或循环之内)。仅后者出现问题。
什么有效:
use v6.d;
my @list = 'aaa' …Run Code Online (Sandbox Code Playgroud)