Ruby 循环控制中break,next,redo的用法区别

by zy at almost 9 years ago, last updated at almost 9 years ago
R

break

break停止正在执行的动作,直接跳出循环。

puts  "break"
a = [ 1 ,2 ,3 ,4 ,5 ,6 ]
a.each{ |x|
  if  x == 4
    break
  else
      puts x
  end
}
break
1
2
3

next

next会跳过现在的这一次循环,直接开始执行下一次循环的动作。

puts  "next"
a = [ 1 ,2 ,3 ,4 ,5 ,6 ]
a.each{ |x|
  if  x == 4
    next
  else
      puts x
  end
}

next
1
2
3
5
6

redo

redo与next很相似,但redo会以相同的条件重新执行这一次循环。

puts  "redo"
i = 0 
[1,2,3,4,5].each{ |x|
  i += 1 
    if i ==4
      redo
    end
    p [i,x]
}
redo
[1, 1]
[2, 2]
[3, 3]
[5, 4]
[6, 5]