我观察到计算天差的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" <- ???
有人能帮我理解背后的原因吗?
答案 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