Дата Инкремент Выпуск - PullRequest
       4

Дата Инкремент Выпуск

4 голосов
/ 22 октября 2009
-> irb
>> (Date.today +3).to_s
=> "2009-10-22"
>> (Date.today + 3).to_s
=> "2009-10-25"

между "+3" и "+ 3", есть разница?

Ответы [ 3 ]

4 голосов
/ 22 октября 2009

«+ 3» без пробела означает положительное значение 3, которое передается методу today в качестве аргумента, а «+ 3» означает плюс три, поэтому возвращаемое значение метода today добавляется к 3.

Если вам интересно, необязательный параметр метода today "задает День календарной реформы" для преобразований в другие форматы даты.

1 голос
/ 22 октября 2009

Я понимаю, что это, должно быть, была неприятная ошибка, чтобы обнаружить. При использовании языка, где вызов метода имеет необязательные круглые скобки, пробел является деликатным вопросом. Учтите следующее:

square(2+2)*2   # square(4)*2 = 16*2 = 32
square (2+2)*2  # square(4*2) = square(8) = 64

Ваш случай сложнее, потому что +3 без пробела на самом деле является унарным оператором. ! ~ и + унарные операторы имеют наивысший приоритет .

Также интересно - унарный оператор имеет более низкий приоритет, чем оператор возведения в степень. Therefor

-4**2  # -(4**2) = -16
0 голосов
/ 22 октября 2009

Мне кажется, что + связывает с 3 в первом случае. То есть переводчик видит Date.today(+3). Если после плюса есть пробел, интерпретатор вместо этого видит (Date.today) + (3).

Использование + для обозначения положительных чисел не очень распространено, поскольку числа положительны для начала, но рассмотрим случай отрицательных чисел: легче увидеть, что Date.today -3 означает нечто иное, чем Date.today - 3.

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