Спать до тех пор, пока условие не будет истинным в рубине Есть ли лучший способ в Ruby спать, пока какое-то условие не будет истинным? loop do sleep(1) if ready_to_go break end end Ответ 1 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). Ответ 2 Вы можете использовать драгоценный камень waitutil, как описано в http://rubytools.github.io/waitutil/, например require 'waitutil' WaitUtil.wait_for_condition("my_event to happen", :timeout_sec => 30, :delay_sec => 0.5) do check_if_my_event_happened end Ответ 3 def sleep_until(time) time.times do break if block_given? && yield sleep(1) end end Использование: sleep_until(18){till_i_die}
Ответ 1 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).
Ответ 2 Вы можете использовать драгоценный камень waitutil, как описано в http://rubytools.github.io/waitutil/, например require 'waitutil' WaitUtil.wait_for_condition("my_event to happen", :timeout_sec => 30, :delay_sec => 0.5) do check_if_my_event_happened end
Ответ 3 def sleep_until(time) time.times do break if block_given? && yield sleep(1) end end Использование: sleep_until(18){till_i_die}