2017-07-06 63 views

回答

5

正常Hash强制将其所有的关键字符串:

my %a = '1' => 'foo', 2 => 'bar'; 

say %a.pairs.perl; # ("1" => "foo", "2" => "bar").Seq 

注意的第二个关键是如何成为字符串"2",即使它最初被传递给哈希作为一个整数。
当你做哈希查找窗口,下标也将自动在使用前会转换为字符串:

say %a{"2"}.perl; # "bar" 
say %a{2}.perl;  # "bar" 

注意如何标2找到正确的元素与关键"2"

从整数到字符串的转换在Perl 6中定义良好,每个唯一整数产生一个唯一的字符串,所以你给出的例子很好。


如果希望自己的哈希键转换为字符串,则可以使用在声明中{}符号覆盖键操作:

my %b{Any} = '1' => 'foo', 2 => 'bar'; 

say %b.pairs.perl; # ("1" => "foo", 2 => "bar").Seq 

say %b{"1"}.perl; # "foo" 
say %b{1}.perl;  # Any 

say %b{"2"}.perl; # Any 
say %b{2}.perl;  # "bar" 

注意如何在这种情况下,第二个键2保持一个整数,并且使用字符串下标"2"进行查找时找不到它,下标1也找不到键"1"的条目。

%b{Any}表示“接受任何类型的钥匙,不要强迫他们”。这有时称为'object Hash',因为它可以从任何对象映射到值。

%b{Int}意味着“只接受Int键,并且不强制它们”。在这种情况下,如果您甚至尝试使用任何不是Int的东西,就会得到一个错误。