Nói với chương trình Ruby để chờ một chút thời gian


418

Làm thế nào để bạn nói với một chương trình Ruby chờ một lượng thời gian tùy ý trước khi chuyển sang dòng mã tiếp theo?

Câu trả lời:


675

Như thế này:

sleep(num_secs)

Các num_secsgiá trị có thể là một số nguyên hoặc phao.

Ngoài ra, nếu bạn viết điều này trong ứng dụng Rails hoặc đã bao gồm thư viện ActiveSupport trong dự án của bạn, bạn có thể tạo các khoảng thời gian dài hơn bằng cú pháp tiện lợi sau:

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

122

Sử dụng giấc ngủ như vậy:

sleep 2

Nó sẽ ngủ trong 2 giây.

Hãy cẩn thận để đưa ra một lập luận. Nếu bạn chỉ chạy sleep, quá trình sẽ ngủ mãi mãi. (Điều này hữu ích khi bạn muốn một sợi chỉ ngủ cho đến khi nó thức dậy.)


3
Đợi đã, nó sẽ ngủ mãi mãi, hay cho đến khi nó "thức dậy"? "Woken" thậm chí có nghĩa là gì?
Michael Dorst

4
@anthropomorphic Nó đề cập đến khi một luồng khác gọi Thread # chạy.
Joshua Pinter

Trên thực tế, khi một chủ đề khác gọi Thread # Wakeup, tôi cho rằng.
chesterbr

2

Tôi thấy untilrất hữu ích với giấc ngủ. thí dụ:

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

Đây là điều tương tự nhưsleep(10.seconds)
danielricecodes

Vâng, ở đây nó giống nhau bởi vì nó sử dụng cùng một đầu vào (thời gian) như được cung cấp bởi giấc ngủ. Tôi muốn làm nổi bật cách untilcó thể được sử dụng để ngủ cho đến khi đạt được bất kỳ điều kiện nào (cũng thích cách cú pháp tự nhiên cảm thấy)
Varun Garg

1

sleep 6sẽ ngủ trong 6 giây. Trong thời gian dài hơn, bạn cũng có thể sử dụng sleep(6.minutes)hoặc sleep(6.hours).


4
Không chắc chắn về downvotes về điều này, nhưng nó có thể là minutes()hours()là phương pháp trên numerics thêm bởi Ruby on Rails - vì vậy không đạt tiêu chuẩn có sẵn trong Ruby - trong lớp ActiveSupport :: Thời gian. Chúng khá thuận tiện mặc dù.
Joool Schulenklopper

11
Tôi nghĩ rằng lý do chính cho downvote là về cơ bản @vijaya_chowdary đã đăng lại câu trả lời đúng đã bỏ phiếu 8 năm sau đó. Tôi sẽ coi nó là lạ ít nhất ...
StahlRat

1
Tôi đã đánh giá thấp cho chính xác điều đó. Đó không phải là ruby ​​tiêu chuẩn.
hayesk

1

Thực hiện giây / phút / giờ, đó là phương pháp đường ray. Lưu ý rằng lợi nhuận ngầm không cần thiết, nhưng chúng trông sạch hơn, vì vậy tôi thích chúng hơn. Tôi không chắc Rails thậm chí còn có .day hoặc nếu nó đi xa hơn, nhưng đây là những thứ tôi cần.

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

Sau này, bạn có thể làm: sleep 5.secondsngủ trong 5 giây. Bạn có thể làm sleep 5.minutesđể ngủ trong 5 phút. Bạn có thể làm sleep 5.hoursđể ngủ trong 5 giờ. Và cuối cùng, bạn có thể sleep 5.daysngủ trong 5 ngày ... Bạn có thể thêm bất kỳ phương thức nào trả về giá trị của bản thân * (số giây trong khung thời gian đó). Như một bài tập, hãy thử thực hiện nó trong nhiều tháng!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.