บอกให้โปรแกรม Ruby รอสักครู่


418

คุณจะบอกโปรแกรม Ruby ให้รอเวลาตามอำเภอใจก่อนที่จะไปยังบรรทัดถัดไปของรหัสได้อย่างไร

คำตอบ:


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

122

ใช้การนอนหลับอย่างเช่น:

sleep 2

นั่นจะนอนประมาณ 2 วินาที

ระมัดระวังในการโต้แย้ง หากคุณเพิ่งทำงานsleepกระบวนการจะนอนหลับตลอดไป (สิ่งนี้มีประโยชน์เมื่อคุณต้องการให้เธรดนอนหลับจนกว่าจะถูกปลุก)


3
เดี๋ยวก่อนมันจะนอนตลอดไปหรือจนกว่าจะเป็น "ตื่น"? "ตื่น" หมายความว่าอย่างไร
Michael Dorst

4
@anthropomorphic มันหมายถึงเมื่อด้ายอื่นเรียก Thread # run
Joshua Pinter

ที่จริงแล้วเมื่อเธรดอื่นเรียกเธรดการปลุก # ฉันคิดว่า
chesterbr

2

ฉันพบว่าuntilมีประโยชน์มากกับการนอนหลับ ตัวอย่าง:

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

นี่เป็นสิ่งเดียวกับsleep(10.seconds)
danielricecodes

ใช่ที่นี่มันเหมือนกันเพราะมันใช้อินพุต (เวลา) ตามที่เสนอโดยการนอนหลับ ฉันต้องการที่จะเน้นวิธีที่untilสามารถใช้ในการนอนหลับจนกว่าจะบรรลุเงื่อนไขใด ๆ (เช่นความรักที่ไวยากรณ์รู้สึกเป็นธรรมชาติ)
Varun Garg

1

sleep 6จะนอนเป็นเวลา 6 วินาที สำหรับระยะเวลานานนอกจากนี้คุณยังสามารถใช้หรือsleep(6.minutes)sleep(6.hours)


4
ไม่แน่ใจเกี่ยวกับ downvotes นี้ แต่อาจเป็นได้minutes()และhours()เป็นวิธีการเกี่ยวกับตัวเลขที่เพิ่มขึ้นโดย Ruby on Rails ดังนั้นจึงไม่มีมาตรฐานใน Ruby - ใน ActiveSupport :: Duration พวกเขาค่อนข้างสะดวก
Jochem Schulenklopper

11
ฉันคิดว่าเหตุผลหลักสำหรับ downvotes คือ @vijaya_chowdary โดยทั่วไปแล้ว reposted คำตอบที่ถูกโหวต 8 ปีต่อมา ฉันคิดว่ามันเป็นเรื่องแปลกอย่างน้อย ...
StahlRat

1
ฉันลงคะแนนอย่างแน่นอน มันไม่ได้เป็นทับทิมมาตรฐาน
hayesk

1

การใช้งานของวินาที / นาที / ชั่วโมงซึ่งเป็นวิธีการทางรถไฟ โปรดทราบว่าไม่จำเป็นต้องส่งคืนสินค้าโดยนัย แต่พวกเขาดูสะอาดกว่าดังนั้นฉันจึงชอบ ฉันไม่แน่ใจว่า Rails มี. วันหรือถ้ามันไปไกลกว่านี้ แต่สิ่งเหล่านี้คือสิ่งที่ฉันต้องการ

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 วัน ... คุณสามารถเพิ่มวิธีการใด ๆ ที่คืนค่าตัวเอง * (จำนวนวินาทีในช่วงเวลานั้น) ลองออกกำลังกายเป็นเวลาหลายเดือน!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.