ZetCode

Ruby until 关键字

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

本教程将解释如何使用 Ruby 的 until 关键字进行循环。until 循环会重复执行代码,直到某个条件变为真。

until 关键字创建一个在其条件为假时运行的循环。当条件评估为真时,它会停止。它是 Ruby 的 while 的反义词。

当您需要重复执行代码直到达到某个状态时,until 循环非常有用。它们可以很好地与布尔条件和方法返回值配合使用。

基本的 until 循环

这个简单的例子演示了 until 循环的基本用法。循环将继续,直到条件变为真。

basic_until.rb
counter = 0

until counter == 5
  puts "Counter is #{counter}"
  counter += 1
end

puts "Loop finished"

循环运行,直到 counter == 5 为假。每次迭代都会增加计数器,并在计数器达到 5 时停止。退出后会打印消息。

until 作为修饰符

Ruby 允许将 until 用作语句修饰符,将其放在要执行的代码之后。这创建了一个更简洁的单行循环。

until_modifier.rb
counter = 0

puts "Counter is #{counter}" until (counter += 1) == 5

puts "Loop finished"

until 后面的代码会重复执行,直到条件为真。递增发生在条件检查本身中。这种形式更紧凑。

until 与用户输入

until 循环非常适合验证用户输入。此示例会一直要求输入,直到收到有效响应。

input_validation.rb
response = ""

until %w[y n].include?(response.downcase)
  print "Do you want to continue? (y/n): "
  response = gets.chomp
end

puts "You chose #{response}"

循环将继续,直到用户输入 'y' 或 'n'。条件检查响应是否在允许的列表中。使用 downcase 将大小写标准化。

until 与 begin-end 块

begin-enduntil 一起使用可以确保在检查条件之前至少执行一次代码。这创建了一个 do-while 风格的循环。

begin_until.rb
attempts = 0

begin
  attempts += 1
  puts "Attempt #{attempts}"
  result = rand(10)
  puts "Got #{result}"
end until result == 7

puts "Found 7 in #{attempts} attempts"

代码块首先执行,然后检查条件。这保证了至少一次迭代。当您必须在测试条件之前运行代码时,此方法很有用。

until 与 Break

break 语句可以提前退出 until 循环。此示例演示了如何从块内部终止循环。

until_break.rb
count = 0

until count == 100
  count += 1
  break if count == 5
  puts "Count is #{count}"
end

puts "Stopped at #{count}"

循环通常会运行直到 count 达到 100,但当 count 达到 5 时,break 会退出。这提供了对循环终止的额外控制。

until 与 Next

next 关键字会跳到 until 循环的下一次迭代。此示例演示了如何跳过偶数。

until_next.rb
number = 0

until number >= 10
  number += 1
  next if number.even?
  puts "Odd number: #{number}"
end

puts "Finished"

number 是偶数时,next 会跳过块的其余部分。只打印奇数。循环将继续,直到 number 达到 10。

until 与复杂条件

until 可以使用逻辑运算符来处理复杂条件。此示例在循环条件中检查多个退出标准。

complex_condition.rb
temperature = 0
time = 0

until temperature >= 100 || time >= 10
  puts "Heating... Time: #{time} min, Temp: #{temperature}C"
  temperature += rand(15..25)
  time += 1
end

puts "Final temperature: #{temperature}C after #{time} minutes"

循环将继续,直到温度达到 100°C 或 10 分钟过去。条件使用逻辑 OR 运算符 (||) 组合了两个检查。

来源

Ruby 关键字文档

本教程涵盖了 Ruby 的 until 循环,并通过实际示例展示了基本用法、修饰符、流程控制和复杂条件。

作者

我叫 Jan Bodnar,是一名热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。至今,我已撰写了 1,400 多篇文章和 8 本电子书。我在教授编程方面拥有十多年的经验。

列出 所有 Ruby 教程