Оценка выражений Ruby: пробелы имеют значение? - PullRequest
18 голосов
/ 19 января 2012

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

Ответы [ 2 ]

17 голосов
/ 19 января 2012

Разница в том, что:

Date.today + 1 

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

Date.today +1 

- это вызов метода today с параметром sg (день календарной реформы) со значением +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

Будет выведен следующий вывод консоли:

- Addition:
ITALY default(2299161)
- Parameter:
1
4 голосов
/ 20 января 2012

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

В данном конкретном случае

Date.today + 1

совпадает с

Date.today().+(1)

Принимая во внимание1013 *

Date.today +1

совпадает с

Date.today(+1)

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

Date.today(1.+@())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...