2016-04-28 16 views
0

コンソールで作業している間に、Date.today -12.monthsDate.today - 12.monthsは異なる出力を与えますが、Rubyがこれらの2つの文をどのように解析するか説明できますか?Rubyが文を解析する仕組みを理解する

精度が高いとすると、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) 

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

@CarySwovelと私は違いは、 '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と書くこともできます。

関連する問題