Скажите Ruby Program подождать некоторое время

418

Как вы говорите программе Ruby ждать произвольное количество времени, прежде чем перейти к следующей строке кода?

user94154
источник

Ответы:

675

Нравится:

sleep(num_secs)

num_secsЗначение может быть целым или с плавающей точкой.

Кроме того, если вы пишете это в приложении Rails или включили библиотеку ActiveSupport в свой проект, вы можете создавать более длинные интервалы, используя следующий удобный синтаксис:

sleep(4.minutes)
# or, even longer...
sleep(2.hours); sleep(3.days) # etc., etc.
# or shorter
sleep(0.5) # half a second
rcoder
источник
122

Используйте сон так:

sleep 2

Это будет спать в течение 2 секунд.

Будьте осторожны, чтобы привести аргумент. Если вы просто запустите sleep, процесс будет спать вечно. (Это полезно, когда вы хотите, чтобы поток спал, пока он не проснулся.)

Клинтон Н. Дрейсбах
источник
3
Подождите, это будет спать вечно, или пока оно не "проснется"? Что значит «проснулся»?
Майкл Дорст
4
@anthropomorphic Имеется в виду, когда другой поток вызывает Thread # run.
Джошуа Пинтер
На самом деле, когда другой поток вызывает Thread # wakeup, я полагаю.
Честербр
2

Я нахожу untilочень полезным со сном. пример:

> time = Time.now
> sleep 2.seconds until Time.now > time + 10.seconds # breaks when true
Варун Гарг
источник
Это то же самое, что иsleep(10.seconds)
danielricecodes
Да, здесь это то же самое, потому что он использует тот же вход (время), который предлагает сон. Я хотел подчеркнуть, как untilможно спать, пока не будет достигнуто какое-либо условие (также мне нравится то, насколько естественным является синтаксис)
Варун Гарг
1

sleep 6будет спать в течение 6 секунд. В течение более длительного периода вы также можете использовать sleep(6.minutes)или sleep(6.hours).

Виджая Чоудары
источник
4
Не уверен насчет понижения, но это могут быть minutes()и hours()методы чисел, добавленные Ruby on Rails - поэтому они не являются стандартными в Ruby - в классе ActiveSupport :: Duration. Они довольно удобны, хотя.
Йохем Шуленклоппер
11
Я думаю, что основной причиной отрицательных голосов является то, что @vijaya_chowdary в основном разместил правильный голос 8 лет спустя. Я бы посчитал это странным, по крайней мере ...
StahlRat
1
Я проголосовал именно за это. Это не стандартный рубин.
Hayesk
1

Реализация секунд / минут / часов, которые являются методами рельсов. Обратите внимание, что неявные возвраты не нужны, но они выглядят чище, поэтому я предпочитаю их. Я не уверен, что у Rails даже есть .days или если он пойдет дальше, но это те, которые мне нужны.

class Integer
   def seconds
      return self
   end
   def minutes
      return self * 60
   end
   def hours
      return self * 3600
   end
   def days
      return self * 86400
   end
end

После этого вы можете сделать: sleep 5.secondsспать 5 секунд. Можно sleep 5.minutesспать до 5 мин. Можно sleep 5.hoursспать до 5 часов. И, наконец, вы можете sleep 5.daysспать в течение 5 дней ... Вы можете добавить любой метод, который возвращает значение self * (количество секунд в этом периоде). В качестве упражнения попробуйте реализовать его в течение нескольких месяцев!

GSB
источник