将Hashmap放入自身会导致奇怪的行为

时间:2018-05-18 21:08:41

标签: ruby hashmap

以下代码创建一个hashmap并将其放在自身内部。

hash = {}
hash[hash] = hash
hash.keys.first == hash # true
hash.values.first == hash # true
hash[hash] # nil??
hash.key?(hash) # False
hash[hash.keys.first] # nil???
hash[{}] # nil

有人可以向我解释这些结果吗?他们似乎非常违反直觉。

1 个答案:

答案 0 :(得分:5)

可变对象(例如--archivesArray)基本上是不合适的 如果您可以修改它们,则使用哈希键。在这种情况下,哈希在插入时被修改(因为它被插入自身!)因此被置于不正确的状态。

如果绝对必要,您可以使用Hash#rehash来纠正对象状态:

Hash