虽然一般情况下,语句都是顺序执行的:函数内的第一条语句先执行,然后是第二条,依次类推。 但是还是可能存在需要执行一段代码多次的情况。
为此编程语言提供各式各样的控制结构实现复杂的程序执行路径。
其中,循环语句可以让我们可以执行一条或一组语句多次。下图中所描述的是大多数语言中循环语句的形式:
Lua 语言提供了如下几种循环结构语句。点击链接可查看详细说明。
| 循环类型 | 描述 |
| ----------------------------------------------------------------------------------- | ---------------------------------------------------------- |
| while 循环 | 先检测条件,条件为真时再执行循环体,直到条件为假时结束。 |
| for 循环 | 执行一个语句序列多次,可以简化管理循环变量的代码。 |
| repeat...until 循环 | 重复执行一组代码语句,直到 until 条件为真为止。 |
| 嵌套循环 | 可以在一个循环语句中再使用一个循环语句。 |
循环控制语句
循环控制语句改变循环正常的执行顺序。当离开一个作用域时,在该作用域内自动创建的对象都会被自动销毁。
Lua 支持如下所示的循环控制语句。点击下面的链接查看详细内容:
| 循环控制语句 | 描述 |
| -------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| break| break 语句结束循环,并立即跳转至循环或 switch 语句后的第一条语句处开始执行。 |
无限循环
如果循环条件永远不可能为假,则此循环为无限循环。while 语句经常被当作无限循环语句使用。因为我们可以直接将其条件设置为真,这样 while 就会一直循环下去。在无限循环中,可以使用 break 跳出循环。
while( true ) do print("This loop will run forever.") end
while 循环
在 Lua 语言中,只要 while 循环条件为真,while 语句就会一直执行,直到 while 循环条件为假为止。
语法
Lua 语言中 while 循环的语法如下所示:
while(condition) do statement(s) end
其中,statement(s) 可能只是一条语句也可能是一个语句块。条件可以是任何表达式,若表达式结果为真,则循环继续。 循环为假时,程序结束 while 循环,执行 while 后面的代码。
流程图
请注意,while 循环的关键点在于循环可能根本不会执行。当检测条件为假是,程序会跳过 while 循环体而直接执行 while 后的第一条语句。
示例
a=10 while( a < 20 ) do print("value of a:", a) a = a+1 end
执行上面的代码,将会得到如下的结果:
value of a: 10 value of a: 11 value of a: 12 value of a: 13 value of a: 14 value of a: 15 value of a: 16 value of a: 17 value of a: 18 value of a: 19
for 循环
for 循环控制结构可以让你高效地写出需要执行特定次数的循环代码。
语法
Lua 语言中 for 循环的语法如下:
for init,max/min value, increment do statement(s) end
下面是 for 循环执行的流程:
- init 首先执行并且只执行一次。在这一步骤中,你需要声明并初始化循环控制变量。
- 接下来,max/min 是循环结束的条件。程序中将 init 与 最大值或最小值进行比较,条件为真则继续执行循环,否则结束循环。
- 循环体执行后,程序跳转至递增或递减语句( increment/descrement )。此语句中,我们可以更新我们的控制变量。
- 再次检查条件。如果条件为真,则执行循环并重复过程(执行循环体,递增运算,再检查条件)。当条件为假时,结束循环。
流程图
示例
for i=10,1,-1 do print(i) end
执行上面的代码后,将得到如下的输出结果:
10 9 8 7 6 5 4 3 2 1
repeat...until 循环
与 for 和 while 循环中先检测条件再决定是否执行循环不同,repeat...until 先执行循环再检测条件判断是否再次执行。
除了 repeat...until 循环一定会执行一次之外,repeat...until 与 while 循环很相似。
语法
Lua 语言中 repeat...until 循环的语法如下:
repeat statement(s) until( condition )
请注意,条件表达式出现在循环的结束处,所以在检查条件之前,循环体中语句 statement(s) 已经执行了一次。
如果条件为假,则控制回到循环开始再次执行循环体。这个过程一直重复到条件为真时结束。
流程图
示例
--[ 局部变量定义 --] local a = 10 --[ 重复循环执行 --] repeat print("value of a:", a) a = a + 1 until( a > 15 )
执行上面的代码,将会得到如下的结果:
value of a: 10 value of a: 11 value of a: 12 value of a: 13 value of a: 14 value of a: 15
循环嵌套
Lua 编程语言允许使用循环嵌套。接下来这一节中将用例子来说嵌套循环的使用方法:
语法
for 循环嵌套的语法如下:
for init,max/min value, increment do for init,max/min value, increment do statement(s) end statement(s) end
while 循环嵌套的语法如下:
while(condition) do while(condition) do statement(s) end statement(s) end
repeat...until 循环嵌套的语法如下:
repeat statement(s) repeat statement(s) until( condition ) until( condition )
需要注意的是,在任何外层循环类型内可以使用任何内层循环类型。
示例
下面的例子中使用了嵌套循环:
j =2 for i=2,10 do for j=2,(i/j) , 2 do if(not(i%j)) then break end if(j > (i/j))then print("Value of i is",i) end end end
运行上面的代码,可以得到如下的输出结果:
Value of i is 8 Value of i is 9 Value of i is 10
break 语句
程序在解释执行过程中,在循环内遇到 break 语句时,循环将立即结束。程序将循环语句的下一条语句开始执行。
如果你是在嵌套循环(即,一个循环内还有一个循环语句)内使用 break 语句,break 只结束内层循环,并从该代码块后的第一条语句处开始执行。
语法
break 语句的语法如下所示:
break;
##流程图:
示例
--[ 局部变量定义--] a = 10 --[ 执行 while 循环--] while( a < 20 ) do print("value of a:", a) a=a+1 if( a > 15) then --[ terminate the loop using break statement --] break end end
执行上面的代码可以得到如下的结果:
value of a: 10 value of a: 11 value of a: 12 value of a: 13 value of a: 14 value of a: 15