Ruby Programına bir süre beklemesini söyle


418

Bir Ruby programına bir sonraki kod satırına geçmeden önce rasgele bir süre beklemesini nasıl söylersiniz?

Yanıtlar:


675

Bunun gibi:

sleep(num_secs)

num_secsDeğeri bir tam sayı ya da şamandıra olabilir.

Ayrıca, bunu bir Rails uygulamasına yazıyorsanız veya projenize ActiveSupport kitaplığını eklediyseniz, aşağıdaki kolaylık sözdizimini kullanarak daha uzun aralıklar oluşturabilirsiniz:

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

122

Kullanım uyku gibi pek:

sleep 2

2 saniye uyuyacak.

Tartışmaya dikkat edin. Sadece koşarsan sleep, süreç sonsuza kadar uyuyacak. (Bu, bir iş parçacığının uyanana kadar uyumasını istediğinizde yararlıdır.)


3
Bekle, sonsuza kadar ya da "uyandı" ya kadar uyuyacak mı? "Uyanmış" ne anlama geliyor?
Michael Dorst

4
@anthropomorphic Başka bir iş parçacığının Thread # run çağrısı anlamına gelir.
Joshua Pinter

Aslında, başka bir iş parçacığı # wakeup iş parçacığı çağırdığında, sanırım.
chesterbr

2

untilUykuda çok faydalı buluyorum . misal:

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

Bu aynı şeydirsleep(10.seconds)
danielricecodes

Evet, işte burada aynı çünkü uyku tarafından sunulanla aynı girdiyi (zamanı) kullanıyor. untilHerhangi bir koşul elde edilene kadar nasıl uyumak için kullanılabileceğini vurgulamak istedim (sözdiziminin ne kadar doğal hissettiğini de seviyorum)
Varun Garg

1

sleep 66 saniye uyuyacaktır. Daha uzun bir süre için sleep(6.minutes)veya tuşunu da kullanabilirsiniz sleep(6.hours).


4
Emin değil bu üzerinde downvotes hakkında, ancak bu olabilir minutes()ve hours()Ruby mevcut böylece standart değil - - ActiveSupport :: Süre sınıfında Ruby on tarafından eklenen numerics üzerinde yöntemlerdir. Yine de oldukça uygun.
Jochem Schulenklopper

11
Bence aşağı oyların temel nedeni @vijaya_chowdary 8 yıl sonra oylanan doğru cevabı temel olarak yanıtladı. En azından garip olduğunu düşünürdüm ...
StahlRat

1
Tam olarak bunun için indirdim. Standart yakut değil.
hayesk

1

Ray yöntemi olan saniye / dakika / saat uygulaması. Örtük getirilere gerek olmadığını unutmayın, ancak daha temiz görünüyorlar, bu yüzden onları tercih ederim. Rails bile .days var ya da daha ileri giderse emin değilim, ama bunlar ihtiyacım olanlar.

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

Bundan sonra şunları yapabilirsiniz: sleep 5.seconds5 saniye uyumak. sleep 5.minutes5 dakika uyumak için yapabilirsiniz . Sen yapabilirsin sleep 5.hours5 saat boyunca uyumaya. Ve son olarak, sleep 5.days5 gün boyunca uyuyabilirsiniz ... Benlik * değerini (herhangi bir zaman diliminde saniye cinsinden) döndüren herhangi bir yöntem ekleyebilirsiniz. Bir egzersiz olarak, aylarca uygulamayı deneyin!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.