Ruby 中常用到的循环控制语句包括:next、break、redo、retry 四种,下面就详细看看使用情景:

next

退出包含 next 的最内层循环的当前迭代,执行下一迭代

for i in 0..1
  puts "i: #{i}"

  for j in 2..4
    next if j == 3
    puts "j: #{j}"
  end
end

输出结果:

i: 0
j: 2
j: 4
i: 1
j: 2
j: 4

break

退出包含 break 的最内层循环

for i in 0..1
  puts "i: #{i}"

  for j in 2..4
    break if j == 3
    puts "j: #{j}"
  end
end

输出结果:

i: 0
j: 2
i: 1
j: 2

redo

重新执行包含 redo 的最内层循环的当前迭代

for i in 0..1
  puts "i: #{i}"

  for j in 2..4
    sleep 3
    puts "j: #{j}"
    redo if j == 3
  end
end

输出结果:

i: 0
j: 2
j: 3
j: 3
...  # 无限输出 j: # retry (Ruby 1.9 后移除)**

retry (Ruby 1.9 后移除)

重新执行包含 retry 的最内层循环

# 请使用 Ruby1.9 之前的版本运行
# 否则会抛异常:SyntaxError: (eval):8: Invalid retry
for i in 0..1
  puts "i: #{i}"

  for j in 2..4
    sleep 3
    puts "j: #{j}"
    retry if j == 3
  end
end

输出结果:

i: 0
j: 2
j: 3
j: 2
j: 3
...  # 无限交替输出 j: 2, j: 3

参考

  1. Ruby Loops - while, for, until, break, redo and retry
  2. Ruby Keywords