La differenza che si sta vedendo è causata dal modo in cui il codice viene rubato. Nel tuo caso, sei inciampato in una sfumatura sintattica che cambia notevolmente il modo in cui il codice viene valutato.
I primi due esempi sono in realtà espressioni che implicano un'operazione su un oggetto. Così
Date.today-1.day
Date.today - 1.day
sono entrambi pari a
Date.today.send(:-, 1.day)
# a "fancy" way to write
Date.today - 1.day
per i secondi due esempi
Date.today -1.day
Date.today -5.days
sono effettivamente diretto metodo chiama il metodo Date.today
e sono quindi equivalente a
Date.today((-1).day)
Questo perché il meno viene interpretato come un prefisso all'1 (e quindi viene analizzato come numero -1). Questa interpretazione è possibile e non genera errori a causa di due proprietà di rubino:
- parentesi sono facoltativi quando si chiama metodi fino a quando il risultato è inequivocabile
Date.today
accetta un argomento opzionale calendario denota utilizzato
I risultati effettivi che si ricevono dipendono un po 'dal proprio ambiente in quanto Rails sembra sovrascrivere alcuni metodi Date qui. In semplice Ruby, si otterrebbero date diverse ma funzionerebbe comunque.
fonte
2013-12-11 18:07:59