gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 07:29:44 27 4
gpt4 key购买 nike

下面的代码创建了一个 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

谁能向我解释这些结果?它们看起来非常违反直觉。

最佳答案

可变对象(例如ArrayHash)基本上不适合用于一个散列键,如果你可以修改它们。在这种情况下,散列在插入点被修改(因为它被插入到自身中!)因此处于不正确的状态。

如果绝对必要,可以使用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

关于ruby - 将 Hashmap 放入自身会导致奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50419299/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com