2016-04-28 71 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