Ruby Hash奇怪的行为

时间:2014-08-26 06:58:56

标签: ruby hash

我有一个Ruby类,它返回一个包含许多键的Hash,其中一些包含Fixint,其他基本类型,一些键包含嵌套的Hashes。现在我已经遇到了一个非常奇怪的行为,Hash返回了:如果我做puts myhash.keys我在哈希中得到一个键列表,如果我myhash.each { |k, v| puts k, v }我也得到了有效的键输出和值如果我尝试直接访问某个密钥,例如myhash["foo"],则会返回nil。有问题的代码太大了,无法在此处发布,我无法将问题缩小到较小的代码段。有没有人建议如何进一步调查此问题?

2 个答案:

答案 0 :(得分:0)

没关系,我发现Hash的键不是纯粹的字符串,它是另一种在打印或分配时表现得非常像字符串的类型,这导致了混乱。密钥是BinData::Primitive,用于描述长度为前缀的字符串。

答案 1 :(得分:0)

您是否指定了正确的密钥名称? '富'和:foo是不同的键:

> hash = { somekey: 'somevalue' }
=> {:somekey=>"somevalue"}
> hash[:somekey]
=> "somevalue"
> hash['somekey']
=> nil

坏主意:

hash['somekey'] = 'someothervalue'
> hash
=> {:somekey=>"somevalue", "somekey"=>"someothervalue"}

您可以使用' active_suppot'宝石得到无关紧要的访问:

require 'active_support/core_ext/hash/indifferent_access'
> hash = { somekey: 'somevalue' }.with_indifferent_access
=> {"somekey"=>"somevalue"}
> hash[:somekey]
=> "somevalue"
> hash['somekey']
=> "somevalue"