2013-06-14 5 views
5

मैं उत्सुक था कि दोनों के बीच क्या अंतर है।रुबी की ActiveSupport लाइब्रेरी में 1.second.from_now और 1.seconds.from_now के बीच अंतर?

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

वे मेरे लिए

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 

ही दिखाई और वे दोनों एक ही कक्षा

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

उत्तर

9

समय दोनों कॉल के बीच समाप्त होने के, तो इस कारण वे अलग हैं:

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

Time#to_f पता चलता है कि वे अंशों अलग कर रहे हैं:

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

कॉल करने के लिए second/seconds समान होता है:

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

अब समझ में आता है। मुझे लगता है कि टाइम ऑब्जेक्ट को प्रिंट करना आंशिक सेकंड को छोटा करता है। – wenderen

+0

बस मेरा जवाब अपडेट किया गया। – Stefan

6

1.second1.seconds के लिए एक उपनाम है, बस अपने कोड अधिक पठनीय मुझे लगता है कि बनाने के लिए । आप इसे in the Numeric class in the Rails source देख सकते हैं।

+0

धन्यवाद। लेकिन फिर == ऑपरेटर के तहत दो कॉल क्यों नहीं हैं? मैंने 'def f की कोशिश की; 1; समाप्त; उपनाम: जी: एफ; जी == एफ' और यह 'सत्य' देता है। क्या मैं कुछ भूल रहा हूँ? – wenderen

+2

क्योंकि "अब" अब वही नहीं है "अब" जैसा कि अब था :- डी –

संबंधित मुद्दे