Рубиновое умножение времени - PullRequest
1 голос
/ 03 мая 2019

Кто-нибудь может сломать это для меня? На мой взгляд, 5 минут в квадрате это 25 минут

irb(main):014:0> now = Time.now.utc
=> 2019-05-03 01:36:41 UTC
irb(main):015:0> now + (5.minutes ** 2)
=> 2019-05-04 02:36:41 UTC

1 Ответ

2 голосов
/ 03 мая 2019
  1. В ruby ​​нет Numeric#minutes, это Rails, обезьяна, запечатывающая все.
  2. Numeric#minutes делегируется ActiveSupport::Duration#minutes, что в свою очередьсоздает экземпляр ActiveSupport::Duratioon::Scalar с количеством секунд в качестве «числа позади». Это число будет использоваться в:
  3. приведении , которое может использоваться влюбая арифметика, включающая Numeric, среди прочего.

Тем не менее, когда foo.minutes встречает арифметическую операцию с Numeric в качестве RHO, он [используя принуждение] выполняет математику, используя числосекунд.

Более того, сравнение с Numeric также сработает:

5.minutes == 300
#⇒ true

Поэтому я советую: никогда не используйте эту вводящую в заблуждение чепуху с обезьянами.Используйте секунды явно для выполнения операций с датой / временем.

...