前言#
一种语言怎么可以少了循环(loop)这么核心的存在,试想一下没有循环语句,让你输出从1开始的是一百个数字,哇,so easy!写一百个print就好了,然而当我把数量调整为100万的时候你也许就会崩溃了,所以循环语句是非常有用的,它帮助我们完成了许多重复性操作,lua也不例外,有着自己的循环语句,语法和其他语言大致相同,但也有着自己的特点。
示例#
lua的循环语句包括几种类型:while循环、repeat循环、for循环和generic for循环,这几种循环各有各的特点,接下来让我来写个小程序来进一步感受一下各种循环语句的差异。
- 首先我们来新建一个文件,将文件命名为loop.lua。
- 在该文件中编写如下代码:
-- 定义一个table
local Languages =
{
"lua",
"c",
"c++",
"java",
"python",
}
local elementnum = table.getn(Languages);
-- while 循环
print("\nwhile loop result:")
local index = 1;
while index <= elementnum do
print("["..index.."] = ".. Languages[index]);
index = index + 1;
end
-- repeat 循环
print("\nrepeat loop result:")
local index = 1;
repeat
print("["..index.."] = ".. Languages[index]);
index = index + 1;
until index > elementnum
-- for 循环
print("\nfor loop result:")
for index = 1, elementnum do
print("["..index.."] = ".. Languages[index]);
end
-- genneric for 循环
print("\ngenneric for loop result:")
for index,value in pairs(Languages) do
print("["..index.."] = ".. value);
end
- 运行结果:
总结#
- 由结果的截图可以知道,几种循环实现的功能是一样的。
- table.getn()函数使用条件:只有table的索引是数字(默认为数字)时才能正确的到表中的元素个数。
- 注意while循环和repeat循环的判断条件是相反的。
- genneric for的另一种形式可以写为:
for value in ipairs(Languages)
。 - 示例中的genneric for实际上有第三个参数,不过是可选的,表示步长,默认是1,当然也可以是-1。
- lua有一点与大多数语言不同,就是一个声明在循环体重的局部变量的作用域包括条件测试。
- 对于上一点的一个例子:在repeat和until之间定义的局部变量可以放在until后边的条件判断。