0

我无法在新代码中重现此问题,但它看起来非常一致。

给定以下数据:

[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],
 {}]

两个时间数组(ttime_range)通过了相等性测试==,但仅在一种情况下(time_range)未能查找值。我曾尝试查看哈希代码(http://www.ruby-doc.org/core-1.9.3/Hash.html#method-i-5B-5D),但仍然很难过。

根据“ Ruby 的 Hash 在比较键时使用哪个相等性测试? ”,hash 用于eql?确定键相等,但两个有问题的键通过eql?

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

任何人都可以提供见解吗?现在我要重新编写代码以利用 assoc 匹配,但我不喜欢做这样的事情。

4

1 回答 1

0

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

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

于 2013-03-25T15:55:22.030 回答