lua語言提供了一組精簡且常用的控制結構,包括用於條件執行的if以及使用者迴圈的while、repeat和for。所有的控制結構語法上都有乙個顯示的終結符:end用於終結if、for及while結構,until用於終結repeat結構。
控制結構的條件表示式的結果可以是任何值。lua語言將所有不是false和nil的值當做真。
if 語句先測試其條件,並根據條件是否滿足執行相應的then部分或else部分。else部分是可選的。
if a<
0 then a == end
if areturn b end
if line > maxlines then
showpage(
) line =
0end
如果要編寫巢狀的if語句,可以使用elseif。它類似於在else後面緊跟乙個if,但可以避免重複使用end:
if op ==
"+" then
r = a + b
elseif op ==
"-" then
r = a - b
elseif op ==
"*" then
r = a * b
elseif op ==
"/" then
r = a / b
else
error(
"invalid operation"
)end
由於lua語言不支援switch語句,所以這種一連串的else-if語句比較常見。
當條件為真時while迴圈會重複執行其迴圈體。lua語言先測試while語句的條件,若條件為假則迴圈結束;否則,lua會執行迴圈體並不斷地重複這個過程。
local i =
1while a[i] do
print
(a[i]
) i = i +
1end
repeat-until語句會重複執行其迴圈體知道條件為真時結束。由於條件測試在迴圈體之後執行,所以迴圈體至少會執行一次。
-
- 輸出第乙個非空的行
local line
repeat
line = io.read(
)until line ~
=" "
print
(line)
和大多數其他程式語言不同,在lua語言中,迴圈體內宣告的區域性變數的作用於包括測試條件:
-
- 使用newton-raphson法計算"x"的平方根
local sqr = x /
2repeat
sqr =
(sqr + x / sqr)/2
local error = math.
abs(sqr^
2- x)
until error < x/
10000
-- 區域性變數'error'此時仍然可見
for 語句有兩種形式:數值型for和泛型for。
數值型for的語法如下:
for var = exp1 , exp2, exp3 do
something
end
在這種迴圈中,var的值從exp1變化到exp2之前的每次迴圈會執行something。並且在每次迴圈結束後將步長exp3增加到var上。第三個表示式exp3是可選的,若不存在,lua語言會預設步長值為1.如果不想給迴圈設定上限,可以使用常量math.huge:
for i =
1, math.huge do
if(0.3*i^3-
20*i^2-
500>=
0) then
pirnt(i)
break
endend
為了更好地使用for迴圈,還需要了解一些細節。首先,在迴圈開始前,三個表示式都會執行一次;其次,控制變數是被for語句自動宣告的區域性變數,且其作用範圍僅限於迴圈體內。一種典型的錯誤是認為控制變數在迴圈結束後仍然存在:
for i =1,
10 do print
(i) end
max= i -
- 可能會出錯
如果需要在迴圈結束後使用控制變數的值,則必須將控制變數的值儲存到另乙個變數中:
-
- 在乙個列表中尋找乙個值
local found = nil
for i =1,
#a do
if a[i]
<
0 then
found = i
break
endendprint
(found)
最後,不要改變控制變數的值,隨意改變控制變數的值可能產生不可預知的結果。如果要在迴圈正常結束前停止for,那麼可以使用break語句。
泛型for遍歷迭代函式返回的所有值。例如我們已經在很多示例中看到過的pairs、ipairs和io.lines等。雖然泛型for看似簡單,但它的功能非常強大。使用恰當的迭代器可以在保證**可讀性的情況下遍歷幾乎所有的資料結構。
當然,我們也可以自己編寫迭代器。儘管泛型for的使用很簡單,但編寫迭代函式卻有不少細節需要注意。
與數值型for不同,泛型for可以使用多個變數,這些變數在每次迴圈時都會更新。當第乙個變數變為nil時,迴圈終止。像數值型for一樣,控制變數時迴圈體中的區域性變數,我們也不應該在迴圈中改變其值。
Lua控制結構語句
控制語句分為條件判斷,迴圈執行和轉向。大體上,跟c的差別不大。條件判斷 使用時注意在if或者elseif的條件後面,新增then。在結束的時候,新增end。if判斷 if 1 then print 1 end if else 判斷 if false then print true else prin...
Lua 流程控制 if語法結構
控制結構的條件表示式結果可以是任何值,lua認為false和nil為假,true和非nil為真。要注意的是lua中 0 為 true 例項 0 為 true if 0 then print 0 為 true end以上 輸出結果為 0 為 true 語句語法 if 布林表示式 then 為 true...
lua 時間控制
os.time 返回當前系統的日曆時間 os.date 返回本地化的時間字串,這裡是 11 28 08 17 23 37 os.date x os.time 返回自定義格式化時間字串 完整的格式化引數 這裡是 11 28 08 os.clock 返回執行該程式cpu花去的時鐘秒數,這裡是1156.7...