在某些条件成立之前,Ruby有没有更好的方法可以睡觉?
loop do
sleep(1)
if ready_to_go
break
end
end
答案 0 :(得分:23)
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
。实际上我几乎从不使用它,更喜欢等效的(!ready_to_go)
。
答案 1 :(得分:3)
您可以使用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
答案 2 :(得分:0)
def sleep_until(time)
time.times do
break if block_given? && yield
sleep(1)
end
end
用法:
sleep_until(18){till_i_die}
答案 3 :(得分:0)
我喜欢这种形式,因为它很简单,并且在测试完成条件后仅在需要时使用睡眠:
begin
ready_to_go = do_some_action
end until ready_to_go or not sleep 1