关于 LUA 的不同类型的 for 循环

我想更多地学习 for 循环,据我所知有不同的类型?

例如,

for i = 1, 5 do
    print("hello")
end

^ 我知道这个,它会打印出 5 次 hello,但还有其他类型的,比如下面这个我不理解,特别是 index 部分(这是什么意思?是数字 1 吗?)以及 ipairs 是什么意思

for index, 5 in ipairs(x) do
    print("hello")
end

如果还有其他类型,请告诉我,我想学习它们,如果您能提供任何进一步的阅读材料,我将非常感激地查看它们

点赞
用户7854383
用户7854383

是的,它会打印五次 hello

根据Difference between pairs, ipairs, and next?上的回答:

ipairspairs的功能完全相同,但有一个微小的区别。

ipairs循环遍历表,直到找到一个nil值或不存在的值。因此,如果您将我展示给您的使用pairs的脚本替换为使用ipairs,它将执行完全相同的操作。

2017-06-01 12:24:18
用户2858170
用户2858170

正如您可以在 Lua 参考手册 3.3.5 For 语句 中所读到的,

for 语句有两种形式:一种是数值形式,另一种是通用形式。

数值形式的 for 循环在控制变量遍历一个算术进程的同时,重复执行一段代码块。它具有以下语法:

stat ::= for Name ‘=’ exp ‘,’ exp [‘,’ exp] do block end

示例:

for i = 1, 3 do
  print(i)
end

将输出:

1
2
3

您很熟悉这个例子。请阅读参考手册以了解更多详细信息。

通用 for 语句通过称为迭代器的函数工作。在每次迭代中,调用迭代器函数以产生一个新值,当此新值为 nil 时停止。通用 for 循环具有以下语法:

stat ::= for namelist in explist do block end namelist ::= Name {‘,’ Name}

示例:

local myTable = {"a", "b", "c"}
for i, v in ipairs(myTable) do
  print(i, v)
end

将输出

1  a
2  b
3  c

ipairs 是其中一个提到的迭代器函数:

返回三个值(一个迭代器函数、table t 和 0),以便构造

for i,v in ipairs(t) do body end

将遍历键-值对 (1,t[1]), (2,t[2]), ...,直到第一个 nil 值。

在这里阅读更多关于 ipairs 和 pairs 的信息:

https://www.lua.org/manual/5.3/manual.html#pdf-pairs

https://www.lua.org/manual/5.3/manual.html#pdf-ipairs

当然,您也可以实现自己的迭代器函数!

确保您还阅读:

《Lua 程序设计第三版》第七章 迭代器与通用 for

2017-06-01 14:31:13