Подтвердить что ты не робот

Оценка выражения Ruby: пробелы?

Представьте себе, что 19 января. Это не будет сложно, если вы посмотрите на этот вопрос сегодня.

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

Что мне здесь не хватает?

4b9b3361

Ответ 1

Отличие состоит в том, что:

Date.today + 1 

является добавлением двух числовых значений и

Date.today +1 

- вызов метода today с параметром sg (день календарной реформы) со значением +1

Лучший способ проверить это - это обезглавить исправление исходного метода с включенным отладочным результатом. См. Этот script в качестве примера:

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

Это будет печатать следующий вывод консоли:

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

Ответ 2

Да, пробел имеет значение в Ruby, вопреки распространенному мнению. Например, foo bar не совпадает с foobar.

В этом частном случае

Date.today + 1

совпадает с

Date.today().+(1)

В то время как

Date.today +1

совпадает с

Date.today(+1)

что совпадает с

Date.today([email protected]())