【发布时间】:2015-04-12 05:27:21
【问题描述】:
在 Ruby 2.1.2 中,我可以成功地同时比较 Time.parse 和 Time.utc 的结果,并返回预期的 true:
Time.parse("2015-02-09T22:38:43Z") == Time.utc(2015, 2, 9, 22, 38, 43)
=> true
但是,当第二个值不是整数时,同样的比较会违反直觉地返回 false:
Time.parse("2015-02-09T22:38:43.1Z") == Time.utc(2015, 2, 9, 22, 38, 43.1)
=> false
尽管第二个值仍然是整数并且仍然等价:
Time.parse("2015-02-09T22:38:43.1Z").sec
=> 43
Time.utc(2015, 2, 9, 22, 38, 43.1).sec
=> 43
Time.parse("2015-02-09T22:38:43.1Z").sec == Time.utc(2015, 2, 9, 22, 38, 43.1).sec
=> true
此外,相同方法的连续调用之间的比较结果为true:
Time.parse("2015-02-09T22:38:43.1Z") == Time.parse("2015-02-09T22:38:43.1Z")
=> true
Time.utc(2015, 2, 9, 22, 38, 43.1) == Time.utc(2015, 2, 9, 22, 38, 43.1)
=> true
为什么会这样?这是一个错误,还是我遗漏了什么?
【问题讨论】:
-
请重新措辞。这是误导/混淆。在您声称比较失败的地方,它并没有失败,它成功并返回
false。 -
这似乎是一个纯 Ruby 问题,在这种情况下,您应该删除所有对 Rails 的引用,尤其是 Rails 标记。