我无法在新代码中重现此问题,但它看起来非常一致。
给定以下数据:
[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_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 匹配,但我不喜欢做这样的事情。