Ruby重启阵列循环

时间:2016-02-24 22:35:44

标签: arrays ruby

我试图在整个数组迭代完毕后重新启动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

任何想法都将不胜感激。谢谢!

4 个答案:

答案 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然后sleepretry

另一个选择是使用更干净,更优雅的cycle