Странно, что это происходит в консоли.Я мог бы понять это в других сценариях, где 1.day используется в качестве входных данных в одном месте и извлекается для использования в другом месте, поскольку 1.day - это Fixnum 86400 с некоторыми специальными метаданными (#steps
), смешанными в нем.
Date
относится, например, + 1
к значению «добавить один день».Rails добавляет некоторое поведение, так что он понимает вещь 1.day
(86400 "секунд", но с step
из [1, :days]
), что на самом деле означает + 1
вместо + 86400
.Вот что вы теряете:
ruby-1.9.2-p290 :171 > d = Date.parse("2010-02-01")
=> #<Date: 2010-02-01 (4910457/2,0,2299161)>
ruby-1.9.2-p290 :172 > d + 86400
=> #<Date: 2246-08-23 (5083257/2,0,2299161)>
ruby-1.9.2-p290 :173 >
Таким образом, значение 1.day
интерпретируется как Fixnum, а не Fixnum с ActiveSupport::Duration
.
irb(main):001:0> Date.parse("2010-02-01") + 1.day.to_i
=> Sun, 23 Aug 2246
Так что есливы используете это значение 1.day
в контексте, где оно не используется немедленно, не ... вместо этого используйте Fixnum 1;)