On this page

Lua 循环

Lua 循环

很多情况下我们需要做一些有规律性的重复操作,因此在程序中就需要重复执行某些语句。

一组被重复执行的语句称之为循环体,能否继续重复,决定循环的终止条件。

循环结构是在一定条件下反复执行某段程序的流程结构,被反复执行的程序被称为循环体。

循环语句是由循环体及循环的终止条件两部分组成的。

Lua while 循环

Lua 编程语言中 while 循环语句在判断条件为 true 时会重复执行循环体语句。

语法

Lua 编程语言中 while 循环语法:

while(condition)
do
   statements
end

statements(循环体语句) 可以是一条或多条语句,condition(条件) 可以是任意表达式,在 condition(条件) 为 true 时执行循环体语句。

以下实例循环输出 a 的值:

a=10

while( a < 20 )
do
    print("a 的值为:", a)
    a = a+1
end

执行以上代码,输出结果如下:

a 的值为:        10
a 的值为:        11
a 的值为:        12
a 的值为:        13
a 的值为:        14
a 的值为:        15
a 的值为:        16
a 的值为:        17
a 的值为:        18
a 的值为:        19

Lua for 循环

Lua 编程语言中 for 循环语句可以重复执行指定语句,重复次数可在 for 语句中控制。

Lua 编程语言中 for语句有两大类::

  • 数值for循环

  • 泛型for循环


数值for循环

Lua 编程语言中数值 for 循环语法格式:

for var=exp1,exp2,exp3 do
    <执行体>  
end  

var 从 exp1 变化到 exp2,每次变化以 exp3 为步长递增 var,并执行一次 "执行体"。exp3 是可选的,如果不指定,默认为1。

实例


for i=1,f(x)
do
    print(i)
end


for i=10,1,-1
do
    print(i)
end

for的三个表达式在循环开始前一次性求值,以后不再进行求值。比如上面的f(x)只会在循环开始前执行一次,其结果用在后面的循环中。



#!/usr/local/bin/lua  

function f(x)
    print("function")
    return x*2
end

for i=1,f(5)
do
    print(i)
end

以上实例输出结果为:

function
1
2
3
4
5
6
7
8
9
10

可以看到 函数f(x)只在循环开始前执行一次。


泛型for循环

泛型 for 循环通过一个迭代器函数来遍历所有值,类似 java 中的 foreach 语句。

Lua 编程语言中泛型 for 循环语法格式:

--打印数组a的所有值  
a = {"one", "two", "three"}
for i, v in ipairs(a) do
        print(i, v)
end 

i是数组索引值,v是对应索引的数组元素值。ipairs是Lua提供的一个迭代器函数,用来迭代数组。

实例



#!/usr/local/bin/lua  

days =
{"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}


for i,v in
ipairs(days)
do
print(v)
end

以上实例输出结果为:

Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday

Lua repeat...until 循环

Lua 编程语言中 repeat...until 循环语句不同于 for 和 while循环,for 和 while 循环的条件语句在当前循环执行开始时判断,而 repeat...until 循环的条件语句在当前循环结束后判断。

语法

Lua 编程语言中 repeat...until 循环语法格式:

repeat
   statements
until( condition )

我们注意到循环条件判断语句(condition)在循环体末尾部分,所以在条件进行判断前循环体都会执行一次。

如果条件判断语句(condition)为 false,循环会重新开始执行,直到条件判断语句(condition)为 true 才会停止执行。

实例

--[ 变量定义 --]

a = 10

--[ 执行循环 --]

repeat
    print("a的值为:", a)
    a = a + 1
until( a > 15 )

执行以上代码,程序输出结果为:

a的值为:        10
a的值为:        11
a的值为:        12
a的值为:        13
a的值为:        14
a的值为:        15

Lua 循环嵌套

Lua 编程语言中允许循环中嵌入循环。以下实例演示了 Lua 循环嵌套的应用。

语法

Lua 编程语言中 for 循环嵌套语法格式:

for init,max/min value, increment
do
   for init,max/min value, increment
   do
      statements
   end
   statements
end

Lua 编程语言中 while 循环嵌套语法格式:

while(condition)
do
   while(condition)
   do
      statements
   end
   statements
end

Lua 编程语言中 repeat...until 循环嵌套语法格式:

repeat
   statements
   repeat
      statements
   until( condition )
until( condition )

除了以上同类型循环嵌套外,我们还可以使用不同的循环类型来嵌套,如 for 循环体中嵌套 while 循环。

以下实例使用了for循环嵌套:

实例


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("i 的值为:",i)
		end
	 end
end

以上代码执行结果为:

i 的值为:        8
i 的值为:        9
i 的值为:        10

循环控制语句

循环控制语句用于控制程序的流程, 以实现程序的各种结构方式。

Lua break 语句

Lua 编程语言 break 语句插入在循环体中,用于退出当前循环或语句,并开始脚本执行紧接着的语句。

如果你使用循环嵌套,break语句将停止最内层循环的执行,并开始执行的外层的循环语句。

语法

Lua 编程语言中 break 语句语法格式:

break

以下实例执行 while 循环,在变量 a 小于 20 时输出 a 的值,并在 a 大于 15 时终止执行循环:

--[ 定义变量 --]
a = 10

--[ while 循环 --]
while( a < 20 )
do
   print("a 的值为:", a)
   a=a+1
   if( a > 15)
   then
      --[ 使用 break 语句终止循环 --]
      break
   end
end

以上代码执行结果如下:

a 的值为:        10
a 的值为:        11
a 的值为:        12
a 的值为:        13
a 的值为:        14
a 的值为:        15

Lua goto 语句

Lua 语言中的 goto 语句允许将控制流程无条件地转到被标记的语句处。

语法

语法格式如下所示:

goto Label

Label 的格式为:

:: Label ::

以下实例在判断语句中使用 goto:

实例 1

local a = 1

::label::
print("--- goto label ---")

a = a+1

if a < 3
then
    goto label   -- a 小于 3 的时候跳转到标签 label

end

输出结果为:

--- goto label ---
--- goto label ---

从输出结果可以看出,多输出了一次 --- goto label ---

以下实例演示了可以在 lable 中设置多个语句:

实例 2

i = 0

::s1:: 
do
  print(i)
  i = i+1
end

if i>3
then

  os.exit()
-- i 大于 3 时退出

end

goto s1

输出结果为:

0
1
2
3

有了 goto,我们可以实现 continue 的功能:

实例 3


for i=1, 3
do
	if i <= 2
	then
		print(i, "yes continue")
        goto continue
	end

	print(i, " no continue")
::continue::
	print([[i'm end]])
end

输出结果为:

1   yes continue
i'm end
2   yes continue
i'm end
3    no continue
i'm end

无限循环

在循环体中如果条件永远为 true 循环语句就会永远执行下去,以下以 while 循环为例:



while( true )
do
    print("循环将永远执行下去")
end