Weisen Sie Ruby Program an, einige Zeit zu warten


417

Wie weist man ein Ruby-Programm an, eine beliebige Zeitspanne zu warten, bevor mit der nächsten Codezeile fortgefahren wird?

Antworten:


675

So was:

sleep(num_secs)

Der num_secsWert kann eine Ganzzahl oder ein Gleitkommawert sein.

Wenn Sie dies in einer Rails-App schreiben oder die ActiveSupport-Bibliothek in Ihr Projekt aufgenommen haben, können Sie längere Intervalle mithilfe der folgenden praktischen Syntax erstellen:

sleep(4.minutes)
# or, even longer...
sleep(2.hours); sleep(3.days) # etc., etc.
# or shorter
sleep(0.5) # half a second

121

Verwenden Sie Schlaf wie folgt:

sleep 2

Das wird 2 Sekunden lang schlafen.

Seien Sie vorsichtig, um ein Argument zu geben. Wenn Sie nur ausführen sleep, wird der Prozess für immer schlafen. (Dies ist nützlich, wenn ein Thread so lange schlafen soll, bis er aufgeweckt ist.)


3
Warten Sie, wird es für immer schlafen oder bis es "aufgewacht" ist? Was bedeutet "aufgewacht" überhaupt?
Michael Dorst

4
@anthropomorphic Bezieht sich darauf, wenn ein anderer Thread Thread # run aufruft.
Joshua Pinter

Wenn ein anderer Thread Thread # wakeup aufruft, nehme ich an.
Chesterbr

2

Ich finde es untilsehr nützlich mit dem Schlaf. Beispiel:

> time = Time.now
> sleep 2.seconds until Time.now > time + 10.seconds # breaks when true

Dies ist das Gleiche wiesleep(10.seconds)
Danielricecodes

Ja, hier ist es dasselbe, weil es die gleiche Eingabe (Zeit) verwendet, die der Schlaf bietet. Ich wollte hervorheben, wie untilman schlafen kann, bis eine Bedingung erfüllt ist (ich
mag

1

sleep 6wird für 6 Sekunden schlafen. Für eine längere Dauer können Sie auch sleep(6.minutes)oder verwenden sleep(6.hours).


4
Nicht sicher über den downvotes auf diesem, aber es könnte sein , dass minutes()und hours()sind Methoden auf Numerik hinzugefügt von Ruby on Rails - also nicht Standard verfügbar in Ruby - in der Active :: Dauer - Klasse. Sie sind jedoch recht praktisch.
Jochem Schulenklopper

11
Ich denke, der Hauptgrund für Abstimmungen ist, dass @vijaya_chowdary 8 Jahre später die richtige Antwort erneut veröffentlicht hat. Ich würde es zumindest für seltsam halten ...
StahlRat

1
Ich habe genau dafür abgelehnt. Es ist kein Standard-Rubin.
Hayesk

1

Implementierung von Sekunden / Minuten / Stunden, die Schienenmethoden sind. Beachten Sie, dass implizite Rückgaben nicht erforderlich sind, aber sauberer aussehen, daher bevorzuge ich sie. Ich bin mir nicht sicher, ob Rails überhaupt .days hat oder ob es weiter geht, aber das sind die, die ich brauche.

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

Danach können Sie Folgendes tun: sleep 5.seconds5 Sekunden lang schlafen. Sie können sleep 5.minutes5 Minuten schlafen. Sie können sleep 5.hours5 Stunden schlafen. Und schließlich können Sie sleep 5.days5 Tage lang schlafen ... Sie können jede Methode hinzufügen, die den Wert von self * (Anzahl der Sekunden in diesem Zeitraum) zurückgibt. Versuchen Sie als Übung, es monatelang umzusetzen!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.