2012-01-19 15 views
17

それは1月19日だと想像してください。今日この質問を見るとこれは難しくありません。Rubyの式の評価:空白の問題?

Date.today 
=> Thu, 19 Jan 2012 # as expected 

Date.today + 1 
=> Fri, 20 Jan 2012 # as expected 

Date.today+1 
=> Fri, 20 Jan 2012 # as expected 

Date.today +1 
=> Thu, 19 Jan 2012 # ?! 

ここでは何が欠けていますか?

Date.today + 1 

が2つの数値の加算と

Date.today +1 

値を持つパラメータsg(カレンダー改革の日)とメソッドtodayへの呼び出しである。

+4

と同じです。興味深いのは:-) –

答えて

16

差があること+1

これを調べる最良の方法は、元のメソッドをデバッグ出力でパッチすることです封印された。一例として、このスクリプトを参照してください。

require 'date' 

class Date 

    def self.today(sg=ITALY) 
    puts "ITALY default("+sg.to_s+")" if sg==ITALY 
    puts sg unless sg==ITALY 
    jd = civil_to_jd(*(Time.now.to_a[3..5].reverse << sg)) 
    new0(jd_to_ajd(jd, 0, 0), 0, sg) 
    end 

end 

puts "- Addition:" 
Date.today + 1 
puts "- Parameter:" 
Date.today +1 

これは、次のコンソール出力に印刷します:はい、空白が人気の信念に反して、Rubyで問題を行い

- Addition: 
ITALY default(2299161) 
- Parameter: 
1 
4

を。たとえば、foo barfoobarと同じではありません。この特定のケースで

Date.today +1 

Date.today(+1) 
と同じであるが

Date.today + 1 

Date.today().+(1) 

と同じです

Date.today([email protected]())