ZetCode

Ruby break 关键字

最后修改日期:2025 年 4 月 27 日

本教程解释了如何使用 Ruby 的 break 关键字来控制循环执行。break 语句提供循环的提前终止。

break 关键字会立即退出当前的循环或迭代器块。程序执行将继续执行循环之后的语句。

当满足某个条件或发生错误时,break 可用于停止迭代。它适用于 Ruby 中的所有循环类型和可枚举方法。

while 循环中的基本 break

此示例显示了当计数器达到 5 时,break 终止 while 循环。循环通常会运行 10 次,但会提前退出。

basic_while_break.rb
counter = 0

while counter < 10
  puts counter
  break if counter == 5
  counter += 1
end

puts "Loop ended"

循环打印数字 0 到 5,然后 break。如果没有 break,它将继续到 9。循环后的消息确认正常终止。

each 迭代器中的 break

Break 在 each 等迭代器中也以类似的方式工作。此示例在数组中搜索特定值,并在找到时 break。

array_search.rb
fruits = ['apple', 'banana', 'cherry', 'date', 'elderberry']

fruits.each do |fruit|
  puts "Checking #{fruit}"
  if fruit == 'date'
    puts "Found the date!"
    break
  end
end

puts "Search complete"

循环检查每种水果,直到找到“date”。Break 停止进一步的迭代,不必要地检查“elderberry”。搜索立即完成。

带值的 break

Ruby 的 break 可以将值返回到循环的上下文。此值成为循环表达式的结果。

break_with_value.rb
result = loop do
  num = rand(1..100)
  puts "Generated: #{num}"
  break num if num > 90
end

puts "High number: #{result}"

循环生成随机数,直到其中一个超过 90。Break 返回此数字,该数字被赋给 result。此模式对于搜索很有用。

带 break 的嵌套循环

Break 只会退出最内层的循环。此示例演示了如何从嵌套循环结构中 break。

nested_loops.rb
(1..3).each do |i|
  puts "Outer loop: #{i}"
  
  (1..3).each do |j|
    puts "  Inner loop: #{j}"
    break if j == 2
  end
end

当 j 达到 2 时,内层循环 break,但外层循环继续。每次外层迭代都会创建一个新的内层循环实例。Break 只影响其直接包含的循环。

case 语句中的 break

虽然 break 主要用于循环,但它也可以出现在循环内的 case 语句中。此示例显示了条件 break。

case_with_break.rb
count = 0

loop do
  count += 1
  case count
  when 1..3
    puts "Counting #{count}"
  when 4
    puts "Stopping at 4"
    break
  else
    break
  end
end

case 语句处理不同的计数范围。当 count 达到 4 时,它会打印一条消息并 break 循环。else 子句为了安全起见也会 break。

break vs return

Break 退出循环,而 return 退出方法。此示例对比了它们在类似上下文中的行为。

break_vs_return.rb
def test_break
  [1, 2, 3].each do |n|
    puts n
    break if n == 2
  end
  puts "After break"
end

def test_return
  [1, 2, 3].each do |n|
    puts n
    return if n == 2
  end
  puts "After return"
end

test_break
test_return

Break 只退出循环,“After break”会被打印。Return 退出整个方法,“After return”会被跳过。根据所需的退出范围进行选择。

自定义方法中的 break

使用 yield 的方法可以响应其块中的 break。此示例展示了一个自定义方法如何正确处理 break。

custom_method.rb
def process_items
  items = [10, 20, 30, 40, 50]
  items.each do |item|
    yield(item)
  end
  :normal_exit
end

result = process_items do |n|
  puts "Processing #{n}"
  break :early_exit if n == 30
end

puts "Result: #{result}"

当块达到 30 时 break,使方法返回 :early_exit。如果没有 break,在处理完所有项目后,它将返回 :normal_exit。

来源

Ruby 关键字文档

本教程通过示例介绍了 Ruby 的 break 关键字,展示了循环控制、返回值和方法交互。使用 break 来优化循环执行。

作者

我叫 Jan Bodnar,是一名充满激情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在教授编程方面拥有超过十年的经验。

列出 所有 Ruby 教程