@geekpi
https://linux.cn/article-15328-1.html
This commit is contained in:
Xingyu Wang 2022-12-08 09:46:53 +08:00
parent ffe6e9c305
commit 8fa78d0858

View File

@ -3,18 +3,22 @@
[#]: author: "Seth Kenlon https://opensource.com/users/seth"
[#]: collector: "lkxed"
[#]: translator: "geekpi"
[#]: reviewer: " "
[#]: publisher: " "
[#]: url: " "
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-15328-1.html"
4 分钟了解 Lua for 循环
了解 Lua for 循环
======
在编程中,迭代是一个重要的概念,因为代码通常必须多次扫描一组数据,以便它可以单独处理每个项目。控制结构使你能够根据通常在程序运行时动态建立的条件来指导程序的流程。不同的语言提供不同的控制,在 [Lua][1] 中,有 while 循环、for 循环和 repeatuntil 循环。本文介绍 for 循环。我将在另一篇文章中介绍 while 和 repeat until 循环。
![][0]
### For 循环
> 了解 for 循环结构和你在控制它时拥有的选项,这样你可以对如何在 Lua 中处理数据做出聪明的决定。
for 循环采用已知数量的项目并确保处理每个项目。“项目”可以是数字。它也可以是一个包含多个条目或任何 Lua 数据类型的表。语法和逻辑有点灵活,但语法允许这些参数,每个参数本质上描述了一个计数器:
在编程中,迭代是一个重要的概念,因为代码通常必须多次扫描一组数据,以便它可以单独处理每个项目。控制结构使你能够根据通常在程序运行时动态建立的条件来指导程序的流程。不同的语言提供不同的控制,在 [Lua][1] 中,有 `while` 循环、`for` 循环和 `repeat until` 循环。本文介绍 `for` 循环。我将在另一篇文章中介绍 `while``repeat until` 循环。
### for 循环
`for` 循环接受已知数量的项目并确保处理每个项目。“项目”可以是数字,它也可以是一个包含多个条目或任何 Lua 数据类型的表。语法和逻辑有点灵活,但语法允许这些参数,每个参数本质上描述了一个计数器:
- 计数器的起始值
- 停止值
@ -32,7 +36,10 @@ end
运行代码以确保所有三个项目都得到处理:
```
$ lua ./for.lua3: apocalypse2: Halloween1: zombie
$ lua ./for.lua
3: apocalypse
2: Halloween
1: zombie
```
这段代码有效地“反向”处理了表,因为它是倒数。你可以正数:
@ -46,7 +53,10 @@ end
此示例从最低索引到最高索引处理表:
```
$ lua ./for.lua1: zombie2: Halloween3: apocalypse
$ lua ./for.lua
1: zombie
2: Halloween
3: apocalypse
```
### 增量
@ -90,7 +100,7 @@ end
此代码创建一个变量,其中包含启动时的时间戳。如果时间戳是偶数(除以 2 时模数为 0则只将时间戳放入表中。如果时间戳是奇数它将三个字符串放入一个表中。
现在你无法确定您的 for 循环需要运行多少次。可能是一次或是三次,但没有办法确定。解决方案是将起始计数设置为 1将最终计数设置为表的长度`#mytable` 是确定表长度的内置快捷方式)。
现在你无法确定你的 `for` 循环需要运行多少次。可能是一次或是三次,但没有办法确定。解决方案是将起始计数设置为 1将最终计数设置为表的长度`#mytable` 是确定表长度的内置快捷方式)。
可能需要多次运行脚本才能看到这两个结果,但最终,你会得到如下结果:
@ -104,7 +114,7 @@ baz
### 带 pairs 和 ipairs 的 for 循环
如果你已经阅读了我关于[表迭代][2]的文章,那么你已经熟悉了 Lua 中最常见的 for 循环之一。这个使用 `pairs``ipairs` 函数来迭代一个表:
如果你已经阅读了我关于 [表迭代][2] 的文章,那么你已经熟悉了 Lua 中最常见的 `for` 循环之一。这个使用 `pairs``ipairs` 函数来迭代一个表:
```
mytable = { "zombie", "Halloween", "apocalypse" }
@ -113,15 +123,15 @@ for i,v in ipairs(mytable) do
end
```
`pairs``ipairs` 函数“解包”表并将值转储到你提供的变量中。在此示例中,我将 `i` 用于 _index_`v` 用于 _value_但变量名称无关紧要。
`pairs``ipairs` 函数“解包”表并将值转储到你提供的变量中。在此示例中,我将 `i` 用于 _索引_`v` 用于 _值_但变量名称无关紧要。
```
$ lua ./for.lua1: zombie2: Halloween3: apocalypse
```
### For 循环
### for 循环
for 循环结构在编程中很常见,由于经常使用表和 pairs 函数,因此在 Lua 中非常常见。了解 for 循环结构和控制它时的选项意味着你可以就如何在 Lua 中处理数据做出明智的决定。
`for` 循环结构在编程中很常见,由于经常使用表和 `pairs` 函数,因此在 Lua 中非常常见。了解 `for` 循环结构和控制它时的选项意味着你可以就如何在 Lua 中处理数据做出明智的决定。
--------------------------------------------------------------------------------
@ -130,7 +140,7 @@ via: https://opensource.com/article/22/11/lua-for-loops
作者:[Seth Kenlon][a]
选题:[lkxed][b]
译者:[geekpi](https://github.com/geekpi)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
@ -138,3 +148,4 @@ via: https://opensource.com/article/22/11/lua-for-loops
[b]: https://github.com/lkxed
[1]: https://opensource.com/article/22/11/lua-worth-learning
[2]: https://opensource.com/article/22/11/iterate-over-tables-lua
[0]: https://img.linux.net.cn/data/attachment/album/202212/08/094609xg8sgk832t0y6s68.jpg