2017-01-06 1 views
3

Я заметил, что разность дней в выражении рубина вычисляет разную мощность, зависящую от пробелов в выражении.Расчет сроков Ruby: Weird Выходы

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" <- ??? 

Может ли кто-нибудь помочь мне понять причину этого?

+3

_Sidenote: _ кажется хороший вопрос для интервью. – mudasobwa

ответ

7

Это вопрос приоритета оператора. Date::today принимает необязательный аргумент.

Date.today - 60 

рассматривается как

Date.today() - 60 

в то время как

(Date.today -60) 

рассматривается как

Date.today(-60) 
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 
Смежные вопросы