Ruby日期计算:奇怪的输出

时间:2017-01-06 10:20:56

标签: ruby date syntax whitespace

我观察到计算天差的ruby表达式会根据表达式中的空格给出不同的输出。

Date.today             #=> #<Date: 2017-01-06 ((2457760j,0s,0n),+0s,2299161j)>
(Date.today - 60).to_s #=> "2016-11-07"
(Date.today-60).to_s   #=> "2016-11-07"
(Date.today- 60).to_s  #=> "2016-11-07"
(Date.today -60).to_s  #=> "2017-01-06" <- ???

有人能帮我理解背后的原因吗?

2 个答案:

答案 0 :(得分:7)

这是运营商优先权的问题。 Date::today接受可选参数。

Date.today - 60

被视为

Date.today() - 60

(Date.today -60)

被视为

Date.today(-60)

答案 1 :(得分:2)

除了mudasobwa的现场answer:你应该在开发时发出警告。

没有-w

$ ruby -rdate -e 'puts Date.today -60'
2017-01-06

使用-w

$ ruby -w -rdate -e 'puts Date.today -60'
-e:1: warning: ambiguous first argument; put parentheses or a space even after `-' operator
-e:1: warning: invalid start is ignored
2017-01-06