Ruby 循环

循环用于执行一段代码,直到满足特定条件为止。这可以帮助我们避免反复编写相同的代码。

Ruby 提供了多种循环技术。Ruby 中最常见的循环是

  • while 循环
  • until 循环
  • for 循环
  • times 循环
  • each 循环
  • loop do...end
  • begin...end while

让我们从 while 循环开始。


Ruby while 循环

while 循环只要给定条件为 true,就会执行一段代码。其语法是

while condition
  # Code to execute
end

该循环的工作原理如下

  1. while 循环首先检查 condition(条件)。
  2. 如果 conditiontrue,则执行循环内的代码。
  3. 循环将一直继续,直到 condition 变为 false
  4. 如果 condition 从一开始就是 false,则循环永远不会执行。

示例:Ruby while 循环

num = 1

# Use while loop to print numbers from 1 to 3
while num <= 3
  puts num
  num += 1
end

puts "Loop finished!"

输出

1
2
3
Loop finished!

在此,由于条件 num <= 3,循环运行了三次。程序的运行方式如下

  1. num 变量被初始化为 **1**。
  2. while 循环开始,因为条件 num <= 3true(因为 **1** 小于 **3**)。
  3. 在循环内部,打印 num 的值。因此,我们得到 **1** 作为输出。
  4. 然后,使用代码 num += 1num 的值增加 **1**。
  5. 因此,循环的第一次迭代就结束了。
  6. 第二次迭代开始,因为 num <= 3 再次为 true(因为 **2** 小于 **3**)。
  7. 整个过程会一直重复,直到 num 大于 **3**。然后,循环终止。
  8. 结果是,打印了从 **1** 到 **3** 的所有数字。
  9. 最后,执行循环外的代码。因此,打印了 Loop finished!

要了解更多信息,请访问 Ruby while 循环


Ruby until 循环

until 循环与 while 循环相反。它执行一段代码,直到给定条件变为 true。其语法是

until condition
  # Code to execute
end

示例:Ruby until 循环

x = 1

until x > 3
  puts x
  x += 1
end

输出

1
2
3

在此示例中,循环运行直到 x > 3 变为 true。换句话说,当 x 变为 **4** 时停止。


Ruby for 循环

Ruby 中的 for 循环用于迭代范围或集合(如数组或哈希)。其语法是

for variable in collection
  # Code to execute
end

这里,

  • collection - 一个值范围,或一个值集合,如 数组哈希
  • variable - 一个占位符,在每次迭代中存储 collection 中每个元素的值。

注意: 许多 Ruby 程序员在迭代集合时更喜欢使用 each 循环而不是 for 循环。


示例:Ruby for 循环(带范围)

for i in 4..6
  puts i
end

输出

4
5
6

在此,for 循环迭代范围 4..6。因此,循环对数字 **4**、**5** 和 **6** 运行了三次。

在循环的每次迭代中,变量 i 取从 **4** 到 **6** 的值,然后打印到屏幕上。它的工作方式如下

循环迭代 i 的值
第一次 4
第二次 5
第三次 6

示例:Ruby for 循环(带数组)

people = ["Bob", "Alex", "Sharon", "Cassie"]

for person in people
  puts person
end

输出

Bob
Alex
Sharon
Cassie

在此,for 循环迭代 people 数组。在循环的每次迭代中,变量 person 取数组中的相应元素。它的工作方式如下

循环迭代 person 的值
1 "Bob"
2 "Alex"
3 "Sharon"
4 "Cassie"

要了解更多信息,请访问 Ruby for 和 each 循环


Ruby times 循环

times 循环是一种重复执行某事固定次数的简洁方式。

times 循环的语法是

n.times do
  # Code to execute
end

在此,循环重复执行 n 次。


示例:Ruby times 循环

3.times do
  puts "Knock!"
end

输出

Knock!
Knock!
Knock!

上面的循环运行了三次。在每次迭代中,我们打印字符串 "Knock!"。因此,"Knock!" 打印了三次。

注意: 我们经常使用 times 循环进行简单的重复。


Ruby each 循环

each 循环用于迭代集合(如数组)中的每个元素。其语法是

collection.each do |item|
  # Code using item
end

这里,

  • collection - 一个值集合,如数组或哈希。
  • item - 一个占位符,在每次迭代中存储 collection 中每个元素的值。

示例:Ruby each 循环

people = ["Bob", "Alex", "Sharon", "Cassie"]

people.each do |person|
  puts person
end

输出

Bob
Alex
Sharon
Cassie

在此,each 循环对 people 数组中的每个元素运行一次。

在循环的每次迭代中,person 变量获取 people 数组中的一个元素,这与我们 for 循环示例的工作方式类似。

循环迭代 person 的值
1 "Bob"
2 "Alex"
3 "Sharon"
4 "Cassie"

要了解更多信息,请访问 Ruby for 和 each 循环


Ruby loop do...end

loop do...end 会无限循环,除非我们显式使用 break 等控制语句来退出循环。其语法是

loop do
  # Code to execute
end

示例:Ruby loop with break

i = 1

loop do
  puts i
  i += 1
    
  # Terminate the loop if i is greater than 3
  break if i > 3
end

输出

1
2
3

在此,循环无限运行,但当 i 大于 **3** 时,break 语句会停止它。

请注意,此循环的行为类似于 while 循环,但我们需要自己管理 break 条件。

要了解更多信息,请访问 Ruby loop do


Ruby begin...end while 循环

Ruby 还提供了 begin...end while 循环,这类似于其他语言中的 do...while 循环。

在此循环中,代码至少执行一次,然后才检查条件。其语法是

begin
  # Code to execute
end while condition

在此,begin 循环首先执行代码,然后才检查 condition(条件)。

  • 如果 conditiontrue,则循环再次运行。
  • 如果 conditionfalse,则循环结束。

示例:Ruby begin...end while 循环

x = 1

begin
  puts x
  x += 1
end while x <= 3

输出

1
2
3

在此,循环打印 x 的值,从 **1** 开始,直到 x 变为 **4**。

正如你所看到的,这个循环的作用就像一个 while 循环,但第一次迭代总是会发生,无论条件是 true 还是 false

注意: begin...end while 循环被许多 Ruby 开发人员不推荐使用,因为它会降低可读性并使代码更难维护。相反,他们更喜欢使用带 break 语句的 loop do...end,这样更清晰、更灵活。

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战