Comment dire à un programme Ruby d'attendre un temps arbitraire avant de passer à la ligne de code suivante?
418
Comme ça:
sleep(num_secs)
La num_secs
valeur peut être un entier ou un flottant.
De plus, si vous écrivez ceci dans une application Rails ou si vous avez inclus la bibliothèque ActiveSupport dans votre projet, vous pouvez construire des intervalles plus longs en utilisant la syntaxe de commodité suivante:
sleep(4.minutes)
# or, even longer...
sleep(2.hours); sleep(3.days) # etc., etc.
# or shorter
sleep(0.5) # half a second
Utilisez le sommeil comme ça:
sleep 2
Ça va dormir pendant 2 secondes.
Soyez prudent de donner un argument. Si vous venez de courir sleep
, le processus s'endormira pour toujours. (Ceci est utile lorsque vous souhaitez qu'un fil soit en veille jusqu'à ce qu'il se réveille.)
Je trouve
until
très utile le sommeil. exemple:la source
sleep(10.seconds)
until
peut être utilisé pour dormir jusqu'à ce que toutes les conditions soient remplies (j'aime aussi la façon dont la syntaxe est naturelle)sleep 6
dormira pendant 6 secondes. Pour une durée plus longue, vous pouvez également utilisersleep(6.minutes)
ousleep(6.hours)
.la source
minutes()
ethours()
des méthodes sur numerics ajoutées par Ruby on Rails - donc pas en Ruby standard disponibles - dans la ActiveSupport :: classe Durée. Ils sont assez pratiques cependant.Mise en place de secondes / minutes / heures, qui sont des méthodes de rails. Notez que les retours implicites ne sont pas nécessaires, mais ils ont l'air plus propres, donc je les préfère. Je ne suis pas sûr que Rails ait même des jours ou s'il va plus loin, mais ce sont ceux dont j'ai besoin.
Après cela, vous pouvez faire:
sleep 5.seconds
dormir pendant 5 secondes. Vous pouvez fairesleep 5.minutes
pour dormir pendant 5 min. Vous pouvez fairesleep 5.hours
pour dormir pendant 5 heures. Et enfin, vous pouvez fairesleep 5.days
pour dormir pendant 5 jours ... Vous pouvez ajouter n'importe quelle méthode qui retourne la valeur de self * (quantité de secondes dans cette période). Comme exercice, essayez de le mettre en œuvre pendant des mois!la source