Lua程序设计 控制结构

         Lua提供了一组传统、小巧的控制结构:if、while、repeat和for。所有的控制结构都有一个显示的终止符:if、for和while以end作为结尾,repeat以until做为结尾。控制结构中的条件表达式可以是任何值,Lua将所有不是false和nil的值都“视”为真。

         if  then  else

         if 语句先测试其条件,然后根据测试结果执行then部分或else部分。else部分是可选的。

if  a < 0 then a = 0 end
if a < b then return a else return b end

       若要编写嵌套的if,可以使用elseif。类似于在else后面紧跟着一个if,它还可以避免在这样的嵌套中出现多个end。

if op == "+" then
    r = a + b
elseif op == "-"  then
  r = a - b
   .....
else 
 print("Error")
end

     Lua 中不支持switch语句,可以使用这种嵌套的if进行分支判断。

     while

     与其他语言中的while循环一样,Lua先测试while的条件。如果条件为假,那么循环结束;不然,Lua执行循环体,并重复这一过程。

local i = 1
while a[i] do
print(a[i])
end

    repeat

    一条repeat-until语句重复执行其循环体直到条件为真时结束。测试是在循环体之后做的,因此循环体至少执行一次。

repeat
  line = io.read()
until  line ~= ""
print(line)

     与其他大多数语言不同的是,在Lua中,一个声明在循环体中的局部变量的作用域包括了条件测试。

local sqr = x/2
repeat
sqr = (sqr + x/sqr)/2
local error = math.abs(sqr^2 - x)
until error < x/10000    --在此仍可以访问error

     数字型for循环

    数字型for循环语法:

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

 【14-09-25更新:数字型for循环语句的结构是指:变量var从exp1 变换到 exp2,每次变化都以exp3作为步长递增(减) var,并执行一次“执行体”】

   第三个表达式是可选的,若不指定的话,Lua会将步长默认为1。如果不想给循环设置上限的话,可以使用常量math.huge。

for i = 1, math.huge do
<执行体>
end

   for循环的3个表达式是在循环开始前一次性求值的。其次,控制变量会被自动地声明为for语句的局部变量,并且仅在循环体内可见(因此,控制变量在循环结束后就不存在了)。

    如果需要在循环结束后访问控制变量的值(通常是在break循环时),必须将该值保存到另一个变量中:

local  found = nil
for i = 1, #a do
if a[i] < 0 then
found = i
break
end
end
print(found)

      不要在循环过程中修改控制变量的值,否则会导致不可预知的的效果。可以使用break语句终止for 循环。

     泛型for

     泛型for循环通过一个迭代器函数来遍历所有值:

---打印数组a的所有值
for i, v in ipairs(a) do print(v) end

   Lua的基础库提供了ipairs,这是一个用于遍历数组的迭代器函数。每次循环中,i会被赋予一个索引值,同时v被赋予一个对应于该索引值的元素值。

   标准库提供了几种迭代器:迭代文件中每行:io.lines、迭代table元素的(pairs)、迭代数组元素的(ipairs)、迭代字符串中单词的(string.gmtch)。对于泛型for循环同样注意两点:

  1,循环的变量是循环体的局部变量。

  2,绝不应该对循环变量作任何赋值。

    break与return

    break和return用于跳出当前的块。

     break语句用于结束一个循环,它只会跳出包含它的那个内部循环(for、repeat或while),而不会改变外层的循环。

      return语句用于从一个函数返回结果,或者用于简单地结束一个函数的执行。任何函数的结尾处都有一句隐式的return。

      break和return只能是一个块的最后一条语句。换句话说,他们应是程序块的最后一条语句,或者是end、else或until前的一条语句。

你可能感兴趣的:(Lua程序设计 控制结构)