Ruby 循环 do

loop do是重复执行一段代码块的非常基本的方法。这个循环会一直运行,除非你使用break语句告诉它停止。

以下是loop do的一个快速示例。您可以阅读其余教程以了解更多信息。

示例

counter = 1

loop do
  puts "Counter: #{counter}"
  counter += 1

  # Terminate loop if counter > 2
  break if counter > 2
end

# Output:
# Counter: 1
# Counter: 2

在这里,counter变量被初始化为1。然后,循环运行并打印counter的值。它会一直运行,直到counter大于2


Ruby loop do 语法

Ruby loop do的语法是:

loop do
  # Code to run
end

如前所述,此循环将永远运行,除非您使用break退出循环。


示例 1:无限循环

让我们看看如果我们不使用break语句来终止循环会发生什么。

# Infinite loop
loop do
  puts "This will print forever!"
end

输出

This will print forever!
This will print forever!
This will print forever!
This will print forever!
... ... ...

这个循环会永远打印消息。永远运行的循环称为无限循环

要停止循环,您必须中断程序。

注意:您可以通过在终端中按Ctrl + C来停止无限循环。这会发送一个中断信号来暂停程序。


示例 2:带 break 的循环

接下来,让我们看看如何使用break语句停止无限循环。

counter = 1

loop do
  puts "This will print forever!"
  counter += 1
  
  # Terminate the loop if counter > 3
  break if counter > 3
end

输出

This will print forever!
This will print forever!
This will print forever!

在这里,循环运行直到counter大于3break语句就是停止循环的操作。

break if counter > 3

示例 3:跳过某些迭代

next语句会跳过当前循环迭代的其余部分,并开始下一次迭代。例如,

i = 0

loop do
  i += 1
  next if i == 2
  puts i
  break if i >= 3
end

输出

1
3

i == 2时,Ruby会跳过该迭代(不执行puts i),然后进入下一个循环周期。


示例 4:模拟 do...while 循环

Ruby不像其他一些语言那样有内置的do...while循环,但是您可以使用loop do...end来模拟它。

注意: do...while循环在检查条件之前至少运行一次代码。因此,即使条件已经是false,循环中的代码也会至少执行一次。

示例

num = 0

loop do

  # Print the value of num
  puts "Number is #{num}"

  # Increase the value of num
  num += 1

  # Terminate the loop if num is less than 3
  break if num < 3
end

输出

Number is 0

即使num在开始时已经小于3,循环在检查条件之前仍然会打印它。

这是因为break语句位于循环内主要代码的之后

因此,即使停止它的条件已经是true,循环体也总是运行至少一次

注意: Ruby还提供了begin...end while循环,它类似于do...while循环。但是,许多Ruby开发者不推荐使用此循环,因为它会降低可读性并使代码更难维护。


常见问题

begin...end while 循环是否类似于 do...while 循环?

Ruby的begin...end while循环类似于其他语言中的do...while循环。

在这个循环中,在检查条件之前代码至少执行一次。它的语法是:

begin
  # Code to execute
end while condition

在这里,begin循环首先执行代码,然后才检查condition

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

示例

num = 0

begin
  puts "Number is #{num}"
  num += 1
end while num > 3

输出

Number is 0

在这里,只要num大于3,循环就会运行。但是,num最初是0(小于3),所以条件num > 3false

但是begin循环会运行一次,在终止之前打印Number is 0

正如你所见,这个循环的作用就像一个do...while循环,即第一个迭代总是发生,无论条件是true还是false

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


示例 5:获取用户输入,直到用户输入负数为止

让我们模拟一个do...while循环,它将持续从用户那里获取数字,直到用户输入负数(循环终止)。

在循环外部,我们将打印输入数字的总和(不包括负数)。

sum = 0

loop do
  print "Enter a number: "
    
  # Get user input and convert it to integer
  num = gets.chomp.to_i
    
  # Terminate the loop if num is negative
  break if num < 0
    
  # Else, add num to sum
  sum += num
end

puts "Sum = #{sum}"

输出

Enter a number: 25
Enter a number: 36
Enter a number: 0
Enter a number: 13
Enter a number: -9
Sum = 74

在这里,只要用户输入的num不是负数,循环就会执行。如果num

  • 负数:循环终止。
  • 非负数num的值被加到sum中。

循环终止后,我们打印sum变量,它是用户到目前为止输入的所有非负数的总和。

提示:如果您使用loop do进行输入验证或重试操作,请始终确保有一个清晰的break条件,以避免意外的无限循环。

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

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

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

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