为什么我不能把哈希作为一个键放在自己里面呢?

时间:2016-05-04 22:56:15

标签: ruby

我可以使用哈希作为键和值:

a = {}
b = {}
a[b] = b
a          #=> {{}=>{}}
a[b] == b  #=> true

我甚至可以将哈希作为值放在其中:

a[:a] = a
a          #=> {{}=>{}, :a=>{...}}
a == a[:a] #=> true

但是我不能把哈希作为一个关键词放在其中:

a[a] = a
a          #=> {{}=>{}, {...}=>{...}}
a[a]       #=> nil
a[a] == a  #=> false

在这种情况下,我希望a == a[a] #=> true

为什么会这样?我没有这个用例,我只是好奇为什么哈希不能用作它自己的密钥。

1 个答案:

答案 0 :(得分:7)

不是你不能。您只需在修改哈希值中的可变密钥后重新进行重新连接。

a = {}
b = {}
a[b] = b
a[:a] = a
a[a] = a

a.rehash
# => {{}=>{}, :a=>{...}, {...}=>{...}}
a[a] == a
# => true

aa[a] = a之前和之后有所不同。因此,您需要更新a的{​​{1}}密钥。