睡觉直到红宝石中的情况属实

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了睡觉直到红宝石中的情况属实相关的知识,希望对你有一定的参考价值。

在某些条件成立之前,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。实际上我几乎从不使用它,更喜欢等效的(!ready_to_go)

另一答案

您可以使用waitutil中描述的http://rubytools.github.io/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
另一答案

我喜欢这种形式,因为它很简单,只有在测试完成条件后才需要睡眠:

begin
  ready_to_go = do_some_action
end until ready_to_go or not sleep 1

以上是关于睡觉直到红宝石中的情况属实的主要内容,如果未能解决你的问题,请参考以下文章

ApiController Post 中的异步和等待

需要“红宝石”

红宝石运算符 ||= 智能吗?

关于上课睡觉

张贴在铁轨上的红宝石的另一页上

想搞定大厂面试官?这位阿里P7大佬分析总结的属实到位