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。lua

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

     Lua 中不支持switch語句,可使用這種嵌套的if進行分支判斷。spa

     whilecode

     與其餘語言中的while循環同樣,Lua先測試while的條件。若是條件爲假,那麼循環結束;否則,Lua執行循環體,並重復這一過程。索引

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

    repeatip

    一條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前的一條語句。

相關文章
相關標籤/搜索