2016-04-28 70 views
0

在控制檯上工作時,Date.today -12.monthsDate.today - 12.months給出了不同的輸出,有人可以解釋Ruby如何解析這兩個語句嗎?瞭解Ruby如何解析語句

作爲精簡,Date.today -12.months的輸出是當前日期,而Date.today - 12.months返回一個一年前的時間戳,這是我在第一種情況下預期的結果。

Date.today ((- 12).months) 

Date.today - 12.months被解析爲:

+0

Ruby沒有方法'Fixnum#months'(或'Integer#months')。你需要一個Rails的標籤。 –

+0

提示:使用'-w'啓用警告(與irb和ruby一起使用)。 – cremno

回答

0

Date.today -12.months作爲被解析

Date.today - (12.months) 
+0

'Date.today -360'和'Date.today 360'都返回代表今天日期的'Date'對象。爲什麼前者與「Date.today - 360」(例如,「5-2」和「5-2」是相同的)不同,後者爲什麼不會引發例外,比如說「222 360」 ? –

+0

@CarySwoveland我認爲區別在於'Date.today()'接受參數,而例如'1'不。運算符優先級可能會在 - >'Date.today .-(360)'與'Date.today(-360)'之間出現。 – Felix

0

我挖在這裏的霧,但服用真棒@澤的答案,我會解釋它像下面。 請注意,Date.today需要一個開始參數(如大多數日期函數)

Date.today  # returns a date 
Date.today(-12) # accepts arguments: http://ruby-doc.org/stdlib-2.3.1/libdoc/date/rdoc/Date.html#method-c-today 

Date.today.-(12) # implements '-' "operator" 

的最後一條語句應使招:如果被喜歡Date.today -12它(見@sawas答案)處理像Date.today(-12)。如果相反,您給minus一點點空間,它會吃掉一個參數,如Date.today - 12,其等於Date.today.-(12),也可以寫爲Date.today.- 12