我试图在整个数组迭代完毕后重新启动ruby中的数组循环。
我发现retry
方法对此无效。代码如下:
letters = ["A","B","C"]
letters.each do |letter|
puts letter
if letter == letters.last
puts "that was the last letter"
#restart the array from A again (I'd like it to continue looping infinitely)
end
sleep 1
end
任何想法都将不胜感激。谢谢!
答案 0 :(得分:6)
使用cycle
。
letters.cycle do |letter|
...
end
答案 1 :(得分:5)
只需将each
循环放入另一个循环:
loop do
letters.each do |letter|
puts letter
sleep 1
end
puts "that was the last letter"
end
答案 2 :(得分:3)
(0..Float::INFINITY).each do |i|
puts letters[i % letters.size]
puts "Whew! That was the last letter, so it's time to start over." \
if ((i+1) %letters.size).zero?
end
# A
# B
# C
# Whew! That was the last letter, so it's time to start over.
# A
# B
# C
# Whew! That was the last letter, so it's time to start over.
# A
# B
# ...
答案 3 :(得分:2)
来自Ruby1.9 retry
只能在begin/rescue
块
你要做的事情可以这样做:
letters = ["A","B","C"]
begin
letters.each do |letter|
puts letter
if letter == letters.last
puts "that was the last letter"
#restart the array from A again (I'd like it to continue looping infinitely)
raise
end
end
rescue
sleep 1
retry
end
注释后的raise
关键字会导致代码进入rescue
然后sleep
和retry
另一个选择是使用更干净,更优雅的cycle