睡觉直到ruby中的情况属实

在某些条件成立之前,Ruby有没有更好的方法可以睡觉?

loop do sleep(1) if ready_to_go break end end 

until可以是一个语句修饰符,导致:

 sleep(1) until ready_to_go 

你必须在另一个线程改变ready_to_go的线程中使用它,否则你将挂起。

 while (!ready_to_go) sleep(1) end 

与此类似,但是,再次,你需要一些东西切换ready_to_go或你挂起。

你可以使用:

 until (ready_to_go) sleep(1) end 

但是until那样我until开始使用。 实际上我几乎从不使用它,更喜欢等效的(!ready_to_go)

您可以使用http://rubytools.github.io/waitutil/中描述的waitutil gem,例如

 require 'waitutil' WaitUtil.wait_for_condition("my_event to happen", :timeout_sec => 30, :delay_sec => 0.5) do check_if_my_event_happened end 
 def sleep_until(time) time.times do break if block_given? && yield sleep(1) end end 

用法:

 sleep_until(18){till_i_die}