Ruby 当设置键和查找通过相等测试时,哈希查找失败

Ruby 当设置键和查找通过相等测试时,哈希查找失败,ruby,hash,Ruby,Hash,我不能在新代码中重现这个问题,但它看起来非常一致 鉴于以下数据: [47] pry> t => [Fri, 01 Mar 2013 00:00:00 +0000, Sun, 24 Mar 2013 23:59:59 +0000] [48] pry> time_range => [Fri, 01 Mar 2013 00:00:00 +0000, Sun, 24 Mar 2013 23:59:59 +0000] [49] pry> t == time_range =&g

我不能在新代码中重现这个问题,但它看起来非常一致

鉴于以下数据:

[47] pry> t
=> [Fri, 01 Mar 2013 00:00:00 +0000, Sun, 24 Mar 2013 23:59:59 +0000]
[48] pry> time_range
=> [Fri, 01 Mar 2013 00:00:00 +0000, Sun, 24 Mar 2013 23:59:59 +0000]
[49] pry> t == time_range
=> true
[52] pry> hsh
=> {[Fri, 01 Mar 2013 00:00:00 +0000, Sun, 24 Mar 2013 23:59:59 +0000]=> {},
 [Fri, 01 Feb 2013 00:00:00 +0000, Thu, 28 Feb 2013 23:59:59 +0000]=> {},
 [Tue, 01 Jan 2013 00:00:00 +0000, Thu, 31 Jan 2013 23:59:59 +0000]=> {}}
这就是我在查找时遇到的问题:

[53] pry> hsh[t]
=> {}
[54] pry> hsh[time_range]
=> nil
[55] pry> hsh.assoc(time_range)
=> [[Fri, 01 Mar 2013 00:00:00 +0000, Sun, 24 Mar 2013 23:59:59 +0000],
 {}]
两个时间数组(
t
time\u range
)通过了与
=
相等的测试,但仅在一种情况下(time\u range)无法查找值。我已经试着研究了Hash代码(),但仍然被难住了

根据“”,哈希使用
eql?
确定键相等,但两个有问题的键通过
eql?

[63] pry> t.eql? time_range
=> true
[64] pry> time_range.eql? t
=> true

有人能提供见解吗?现在我要重新编写代码以利用assoc匹配,但我不喜欢这样做。

基于这些链接,两个对象的哈希是否相同

我们在多线程JRuby环境中遇到了一些问题,其中两个单独运行时中的键满足==但由于底层键的对象ID不同而无法检索键。
这可能是一类类似的问题——两个对象a和B满足a.eql?B但不满足A是B

您指的是哪一个是相同的?有关信息,我正在windows上使用MRI ruby 1.9.3p327。这个问题也发生在我们的prod Linux机器上。hash方法也用于等式检查。检查-我不确定这是否仍然是最新的,但这是一个你可以检查的途径。
hash
不平等不是问题,因为
t
hsh.keys.first.hash
t.hash=>-3958758151071268050
hsh.keys.first.hash=>-3958758151071268050
hsh.keys.first.hash==t.hash=>true