作者:陈翔_是学长 | 来源:互联网 | 2022-12-16 19:20
以下代码创建一个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> Tom Lord..:
如果你可以修改它们,那么可变对象(例如Array
和Hash
)对于散列键基本上是不合适的.在这种情况下,哈希在插入点被修改(因为它被插入自身!),因此处于不正确的状态.
如果绝对必要,您可以使用Hash#rehash
来纠正对象状态:
hash = {}
hash[hash] = hash
hash.rehash # !!!!
hash.keys.first == hash # true
hash.values.first == hash # true
hash[hash] #=> {{...}=>{...}}
hash.key?(hash) # true
hash[hash.keys.first] #=> {{...}=>{...}}
hash[{}] # nil