Lua的控制結構

2021-10-04 23:31:04 字數 2780 閱讀 9955

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...