加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 02:57:19 所属栏目:百科 来源:网络整理
导读:以下代码创建一个hashmap并将其放在自身内部. hash = {}hash[hash] = hashhash.keys.first == hash # truehash.values.first == hash # truehash[hash] # nil??hash.key?(hash) # Falsehash[hash.keys.first] # nil???hash[{}] # nil 任何人都可以向我解释这
以下代码创建一个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

任何人都可以向我解释这些结果吗?他们似乎非常违反直觉.

解决方法

可变对象(如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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读