2013-06-14 33 views
5

Tôi tò mò về sự khác nhau giữa hai người.Sự khác nhau giữa 1.second.from_now và 1.seconds.from_now trong thư viện ActiveSupport của Ruby?

irb(main):001:0> require 'active_support/core_ext' 
=> true 
irb(main):002:0> 1.second.from_now == 1.seconds.from_now 
=> false 

Họ trông giống nhau với tôi

irb(main):003:0> p 1.second.from_now; p 1.seconds.from_now; nil 
2013-06-14 17:50:28 +0530 
2013-06-14 17:50:28 +0530 
=> nil 

Và cả hai đều có cùng lớp

irb(main):004:0> 1.second.from_now.class == 1.seconds.from_now.class 
=> true 

Trả lời

9

Thời gian trôi qua giữa hai cuộc gọi, đó là lý do tại sao họ là khác nhau:

Time.now == Time.now 
#=> false 

Time#to_f cho thấy rằng họ là phần ngoài:

a, b = 1.second.from_now, 1.second.from_now 
a.to_f #=> 1371213500.506212 
b.to_f #=> 1371213500.5062568 

Các cuộc gọi đến second/seconds là giống hệt nhau:

1.second == 1.seconds 
#=> true 
+0

Làm cho cảm giác bây giờ. Tôi đoán in đối tượng Time cắt ngắn các số thập phân. – wenderen

+0

Chỉ cần cập nhật câu trả lời của tôi. – Stefan

6

1.second là một bí danh cho 1.seconds, chỉ để làm cho mã của bạn dễ đọc hơn tôi đoán . Bạn có thể xem nó in the Numeric class in the Rails source.

+0

Cảm ơn. Nhưng sau đó tại sao hai cuộc gọi đến from_now không bằng nhau theo toán tử ==? Tôi đã thử 'def f; 1; kết thúc; bí danh: g: f; g == f' và nó trả về 'true'. Tui bỏ lỡ điều gì vậy? – wenderen

+2

Bởi vì "bây giờ" bây giờ là không giống nhau "bây giờ" như bây giờ sau đó :-D –

Các vấn đề liên quan