为什么这个表达式返回false?
(Time.now - 10.hours).utc == Time.now.utc - 10.hours
为什么要解释结果的差异?哪种方式是正确的?
表达式是等效的,但当按顺序调用时,不会返回相同的结果。注:
Time.now == Time.now #=> false
Time.now - Time.now #=> Some really small negative number
如果你连续两次调用Time.now
,第二次发生在第一次之后,对吧?即使是非常之后的短时间。
我不会说任何一种形式都更正确。如果存储Time.now
并运行相同的比较,则会得到预期的结果。
t = Time.now
t.utc = 10.hours == (t - 10.hours).utc #=> true
因为它们不一样。Rubys Time.now
将时间跟踪到几分之一秒,#to_s
的输出并没有显示出这一点。
>> Time.now == Time.now
=> false
>> Time.now.to_i == Time.now.to_i
=> true
>> Time.now.to_f == Time.now.to_f
=> false
请在此处查看Time
类的文档。
(Time.now - 10.hours).utc.to_s == (Time.now.utc - 10.hours).to_s ==> true
(Time.now - 10.hours).utc - (Time.now.utc - 10.hours) ==> a small, non-zero
number. IE -1.3e-05
请注意,a_time.to_s与a_time.inspect相同,它只显示最接近秒的时间。但内部分辨率远小于一秒。