Ruby 手册 | 06 - 循环控制语句

131 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第6天,点击查看活动详情

一、循环控制语句

循环语句常用与遍历字符串数组等,Ruby 中提供了 while, until 和 for 3 个关键字用于循环语句。

while 循环

Ruby 中 while 循环的用法如下:

while 条件表达式 [do]
    ...
end

当条件表达式为 true 时,重复执行循环体的代码,当条件表达式为 false 时,跳出循环。

i = 0

while i < 10
  puts i
  i += 1
end

执行上述代码,输出结果如下:

0
1
2
3
4
5
6
7
8
9

until 循环

until 循环的用法与 while 循环的用法相反,until 后表达式为 false 时才会执行循环体的代码,直到 until 后表达式为 true 时停止循环。

i = 0

until i > 10
  puts i
  i += 1
end

执行上述代码,输出结果如下:

0
1
2
3
4
5
6
7
8
9
10

for 循环

Ruby 中的 for 循环只有一种用法:

for 循环变量 in 范围表达式 [do]
    ···
end

for 语句在范围表达式中不断迭代运行包含的代码,如果需要输出 1~10 的数字,可以这样:

for i in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    puts i
end    

这种方式比较繁琐,如果使用区间则会简便很多

for i in (1..10)
    puts i
end

for 语句实际上是通过调用范围表达式对象的 each 方法来循环执行的,其中 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 是一个数组对象,而 (1..10) 是一个区间对象,它们都可以调用 each 方法来实现遍历或者循环。

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10].each do |i|
  puts i
end

(1..10).each do |i|
  puts i
end

其中 |i| 就表示定义一个循环变量 i,这种遍历的方式在 Ruby 代码中更常用。

除了数组和范围两个对象之外,字符串对象也有 each_char 方法来遍历字符串中的每一个字符

"I am SPriderMan".each_char do |c|
  puts c
end

除此之外字符串还有 each_byte 和 each_line 等方法。

在循环过程中很可能需要跳出循环,Ruby 提供了 break、redo 和 next 几个关键来改变循环的过程。

  • break 用于跳出整个循环体
  • next 用于直接跳到下一个循环周期
  • redo 相当于重复当前循环周期
(1..10).each do |i|
  puts i
  break if i > 5
end

执行上述代码,输出结果如下:

1
2
3
4
5
6

当 i = 6 时 if 后表达式为 true,执行 break 语句跳出整个循环,所有输出的 i 的值为 1~6

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10].each do |i|
  next if i % 2 == 0
  puts i
end

执行上述代码,输出结果如下:

1
3
5
7
9

当 i / 2 == 0 时执行 next,既跳出当前循环,继续执行下一个循环,所以会输出 i / 2 != 0 的数字。

Ruby 中 next 关键字与 Python 和 Java 循环中的 continue 关键字的作用是一样的,用于跳出当前循环,继续执行下一次循环。