2017-07-06 46 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的東西,就會得到一個錯誤。

相關問題