Ruby带有break,next和redo的循环控制
示例
一个Ruby块的执行流可与被控制break,next和redo语句。
break
该break语句将立即退出该块。该块中所有剩余的指令将被跳过,并且迭代将结束:
actions = %w(run jump swim exit macarena)
index = 0
while index < actions.length
action = actions[index]
break if action == "exit"
index += 1
puts "Currently doing this action: #{action}"
end
#当前正在执行此操作:运行
#当前正在执行此操作:跳转
#当前正在执行此操作:游泳next
该next语句将立即返回到该块的顶部,并进行下一次迭代。该块中所有剩余的指令将被跳过:
actions = %w(run jump swim rest macarena)
index = 0
while index < actions.length
action = actions[index]
index += 1
next if action == "rest"
puts "Currently doing this action: #{action}"
end
#当前正在执行此操作:运行
#当前正在执行此操作:跳转
#当前正在执行此操作:游泳
#当前正在执行此操作:macarenaredo
该redo语句将立即返回到该块的顶部,然后重试相同的迭代。该块中所有剩余的指令将被跳过:
actions = %w(run jump swim sleep macarena)
index = 0
repeat_count = 0
while index < actions.length
action = actions[index]
puts "Currently doing this action: #{action}"
if action == "sleep"
repeat_count += 1
redo if repeat_count < 3
end
index += 1
end
#当前正在执行此操作:运行
#当前正在执行此操作:跳转
#当前正在执行此操作:游泳
#当前正在执行此操作:睡眠
#当前正在执行此操作:睡眠
#当前正在执行此操作:睡眠
#当前正在执行此操作:macarenaEnumerable迭代
除了循环外,这些语句还可以使用Enumerable迭代方法,例如each和map:
[1, 2, 3].each do |item|
next if item.even?
puts "Item: #{item}"
end
#项目:1
#项目:3阻止结果值
在break和next语句中,可能会提供一个值,并将其用作块结果值:
even_value = for value in [1, 2, 3]
break value if value.even?
end
puts "The first even value is: #{even_value}"
#第一个偶数值为:2