如何让Ruby循环执行break后从顶部重启?含嵌套循环方案咨询
解决方案:用外层循环实现循环重启 + 总计数控制
嘿,这个需求很好实现,你考虑用until嵌套的思路完全没问题!咱们直接把想法落地成可运行的代码,还优化了几个细节避免不必要的操作:
# 定义每轮输出的最大次数和总目标次数 MAX_PER_LOOP = 10 TARGET_TOTAL = 1000 total_counter = 0 # 外层until循环:只要总计数没到1000,就持续重启内部循环 until total_counter >= TARGET_TOTAL # 每轮开始前重置本轮计数器 text_counter = 0 puts "=== Starting a new cycle ===" # 内部循环:负责本轮输出hello loop do puts "hello" text_counter += 1 total_counter += 1 sleep(2) # 本轮达到上限时,跳出内部循环 break if text_counter >= MAX_PER_LOOP end # 先检查是否已经完成总目标,避免最后一轮白等2小时 break if total_counter >= TARGET_TOTAL puts "Cycle finished, sleeping for 2 hours..." sleep(7200) # 2小时 = 7200秒 end puts "Test ended! Total 'hello' messages sent: #{total_counter}"
代码逻辑说明:
- 用
total_counter跟踪所有轮次的总输出次数,直到达到1000就终止整个程序 - 外层
until循环负责重启逻辑:每次内部循环结束(break后),只要总计数没达标,就休眠2小时然后重新启动内部循环 - 每轮开始前重置
text_counter,确保每轮都能从0开始计数到10 - 加了一个额外的总计数检查,避免最后一轮刚好输出到1000次时,还白白休眠2小时
这样就能完美实现你想要的效果:每输出10次hello就休息2小时,循环往复直到总输出次数达到1000次为止。
内容的提问来源于stack exchange,提问作者DestroyedPixels
相关产品推荐
相关产品推荐

