2012-01-19 52 views
17

Hãy tưởng tượng đó là ngày 19 tháng 1. Điều này sẽ không khó nếu bạn nhìn vào câu hỏi này ngay hôm nay.Đánh giá biểu thức Ruby: khoảng trắng quan trọng?

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 # ?! 

Tôi thiếu gì ở đây?

+4

Điều thú vị :-) –

Trả lời

16

Sự khác biệt là:

Date.today + 1 

là một sự bổ sung của hai giá trị số và

Date.today +1 

được một cuộc gọi đến các phương pháp today với tham số sg (ngày cải cách lịch) với giá trị +1

Cách tốt nhất để kiểm tra điều này là để khỉ vá phương pháp gốc bằng cách gỡ lỗi đầu ra cluded. Xem kịch bản này làm ví dụ:

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 

này sẽ in ra console sau:

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

Vâng, khoảng trắng không vật chất trong Ruby, trái với niềm tin phổ biến. Ví dụ: foo bar không giống như foobar.

Trong trường hợp đặc biệt này,

Date.today + 1 

cũng giống như

Date.today().+(1) 

Trong khi

Date.today +1 

cũng giống như

Date.today(+1) 

giống với

Date.today([email protected]()) 
Các vấn đề liên quan