Lua 循环:如何使用 while 和 repeat until

学习如何在 Lua 中使用 while 和 repeat until 循环以及何时使用它们。
还没有读者喜欢这个。
Woman programming

WOCinTech Chat。由 Opensource.com 修改。CC BY-SA 4.0

控制结构是编程语言的重要特性,因为它们使您能够根据程序运行时动态建立的条件来指导程序的流程。不同的语言提供不同的控制结构,在 Lua 中有 while 循环、for 循环和 repeat until 循环。本文介绍了 while 和 repeat until 循环。由于 for 循环的灵活性,我将在另一篇文章中介绍它。

条件由使用运算符的表达式定义,运算符是您可能在数学课上认识的符号的专业术语。Lua 中有效的运算符有

  • == 等于

  • ~= 不等于

  • < 小于

  • > 大于

  • 小于或等于

  • >= 大于或等于

这些被称为关系运算符,因为它们会引导您研究两个值之间如何关联。还有逻辑运算符,它们的含义与英语中的含义相同,可以合并到条件中,以进一步描述您要检查的状态

  • and(与)

  • or(或)

以下是一些条件示例

  • foo > 3:变量 foo 是否大于 3?foo 必须为 4 或更大才能满足此条件。

  • foo >= 3foo 是否大于或等于 3?foo 必须为 3 或更大才能满足此条件。

  • foo > 3 and bar < 1foo 是否大于 3,同时 bar 小于 1?要使此条件为真,foo 变量必须为 4 或更大,同时 bar 为 0。

  • foo > 3 or bar < 1foo 是否大于 3?或者,bar 是否小于 1?如果 foo 为 4 或更大,或者 bar 为 0,则此条件为真。如果 foo 为 4 或更大,而 bar 为 0 会发生什么?答案将在本文后面出现。

While 循环

while 循环只要某个条件满足就执行指令。例如,假设您正在开发一个应用程序来监控正在进行的僵尸末日。当没有僵尸剩余时,僵尸末日就结束了

zombie = 1024

while (zombie > 0) do
  print(zombie)
  zombie = zombie-1
end

if zombie == 0 then
  print("No more zombie apocalypse!")
end

运行代码以观看僵尸消失

$ lua ./while.lua
1024
1023
[...]
3
2
1
No more zombie apocalypse!

Until 循环

Lua 也有一个 repeat until 循环结构,它本质上是一个带有“catch”语句的 while 循环。假设您开始园艺,并且想要跟踪还剩下什么可以收获

mytable = { "tomato", "lettuce", "brains" }
bc = 3

repeat
   print(mytable[bc])
   bc = bc - 1
until( bc == 0 )

运行代码

$ lua ./until.lua
brains
lettuce
tomato

这很有帮助!

无限循环

无限循环具有永远无法满足的条件,因此它会无限运行。这通常是由错误的逻辑或程序中意外状态引起的错误。例如,在本文的开头,我提出了一个逻辑难题。如果将循环设置为在 foo > 3 or bar < 1 之前运行,那么当 foo 为 4 或更大,而 bar 为 0 时会发生什么?

以下是解决此难题的代码,并使用 break 语句作为安全措施,以防万一

foo = 9
bar = 0

while ( foo > 3 or bar < 1 ) do
  print(foo)
  foo = foo-1

  -- safety catch
  if foo < -800000 then
    break
  end
end

您可以安全地运行此代码,但它确实模仿了意外的无限循环。有缺陷的逻辑是 or 运算符,它允许循环在 foo 大于 3 和 bar 小于 1 时继续运行。and 运算符具有不同的效果,但我将其留给您探索。

无限循环实际上确实有其用途。图形应用程序使用技术上是无限循环的东西来保持应用程序窗口打开。无法知道您的用户打算使用该应用程序多长时间,因此程序会无限运行,直到用户选择退出。在这些情况下使用的简单条件是显然始终满足的条件。以下是一个无限循环的示例,同样为了方便起见,内置了安全措施

n = 0

while true do
  print(n)
  n = n+1

  if n > 100 then
  break
  end
end

条件 while true 始终满足,因为 true 始终为真。这是编写 while 1 == 1 或类似永远为真的简洁方式。

Lua 中的循环

正如您可以从示例代码中看出的那样,尽管有不同的实现,但循环基本上都朝着相同的目标工作。选择对您有意义并且最适合您需要执行的处理的循环。并且以防万一您需要它:终止失控循环的键盘快捷键是 Ctrl+C

标签
Seth Kenlon
Seth Kenlon 是一位 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。他曾在电影和计算机行业工作,通常同时从事这两个行业。

评论已关闭。

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.