新聞中心
控制結(jié)構(gòu)是編程語言的一個重要特征,因為它們使你能夠根據(jù)通常在程序運行時動態(tài)建立的條件來指導程序的流程。不同的語言提供了不同的控制,在 Lua 中,有 ??while??? 循環(huán)、??for??? 循環(huán)和 ??repeat??? ??until??? 循環(huán)。這篇文章涵蓋了 ??while??? 和 ??repeat until??? 循環(huán)。由于它們的靈活性,我在一篇 ??單獨的文章??? 中介紹 ??for?? 循環(huán)。

成都創(chuàng)新互聯(lián)網(wǎng)絡(luò)公司擁有十年的成都網(wǎng)站開發(fā)建設(shè)經(jīng)驗,1000+客戶的共同信賴。提供網(wǎng)站設(shè)計制作、網(wǎng)站設(shè)計、網(wǎng)站開發(fā)、網(wǎng)站定制、賣友情鏈接、建網(wǎng)站、網(wǎng)站搭建、響應(yīng)式網(wǎng)站、網(wǎng)頁設(shè)計師打造企業(yè)風格,提供周到的售前咨詢和貼心的售后服務(wù)
條件是由一個使用運算符的表達式來定義的,運算符是你在數(shù)學課上可能認識的符號的一個花哨的術(shù)語。Lua 中有效的運算符有:
- ?
?==?? 等于 - ?
?~=??不等于 - ?
?? 小于 - ?
?>?? 大于 - ?
????小于或等于 - ?
?>=?? 大于或等于
這些被稱為關(guān)系運算符,因為它們比較兩個值之間的關(guān)聯(lián)。還有一些邏輯運算符,其含義與英語中的含義相同,可以納入條件中,進一步描述你想檢查的狀態(tài):
- ?
?and?? - ?
?or??
下面是一些條件的例子:
- ?
?foo > 3??:變量 ??foo?? 是否大于 3???foo?? 必須是 4 或更大才能滿足這個條件。 - ?
?foo >= 3??:??foo?? 是否大于或等于 3???foo?? 必須是 3 或更大才能滿足這個條件。 - ?
?foo > 3 and bar < 1??:??foo?? 是否大于 3 而 ??bar?? 小于 1?要滿足這個條件,??foo?? 變量必須在 ??bar?? 為 0 的同時為 4 或更大。 - ?
?foo> 3 or bar < 1??:??foo?? 是否大于 3?或者,??bar?? 是否小于 1?如果 ??foo?? 是 4 或更大,或者 ??bar?? 是 0,那么這個條件就是真的。如果 ??foo?? 是 4 或更大,而 ??bar?? 是 0,會怎樣?答案出現(xiàn)在本文的后面。
While 循環(huán)
只要滿足某個條件,while 循環(huán)就會執(zhí)行指令。例如,假設(shè)你正在開發(fā)一個應(yīng)用來監(jiān)測正在進行的僵尸末日。當沒有剩余的僵尸時,就不再有僵尸末日了:
zombie = 1024
while (zombie > 0) do
print(zombie)
zombie = zombie-1
end
if zombie == 0 then
print("No more zombie apocalypse!")
end
運行代碼,看僵尸消失:
$ lua ./while.lua
1024
1023
[...]
3
2
1
No more zombie apocalypse!
until 循環(huán)
Lua 還有一個 ??repeat?? ??until?? 循環(huán)結(jié)構(gòu),本質(zhì)上是一個帶有 ??catch?? 語句的 ??while?? 循環(huán)。假設(shè)你在從事園藝工作,你想追蹤還剩下什么可以收獲的東西:
mytable = { "tomato", "lettuce", "brains" }
bc = 3
repeat
print(mytable[bc])
bc = bc - 1
until( bc == 0 )運行代碼:
$ lua ./until.lua
brains
lettuce
tomato
這很有幫助!
無限循環(huán)
一個無限循環(huán)有一個永遠無法滿足的條件,所以它無限地運行。這通常是一個由錯誤邏輯或你的程序中的意外狀態(tài)引起的錯誤。例如,在本文的開頭,我提出了一個邏輯難題。如果一個循環(huán)被設(shè)定為 ??foo > 3 or bar < 1?? 運行 ,那么當 ??foo?? 為 4 或更大而 ??bar?? 為 0 時,會發(fā)生什么?
下面是解決這個問題的代碼,為了以防萬一,還使用了 ??break?? 語句安全捕獲:
foo = 9
bar = 0
while ( foo > 3 or bar < 1 ) do
print(foo)
foo = foo-1
-- safety catch
if foo < -800000 then
break
end
end
你可以安全地運行這段代碼,但它確實模仿了一個意外的無限循環(huán)。有缺陷的邏輯是 ??or?? 運算符,它允許這個循環(huán)在 ??foo?? 大于 3 和 ??bar?? 小于 1 的情況下繼續(xù)進行。??and?? 運算符有不同的效果,但我讓你去探索。
無限循環(huán)實際上有其用途。圖形應(yīng)用使用技術(shù)上的無限循環(huán)來保持應(yīng)用程序窗口的開放。我們沒有辦法知道用戶打算使用這個程序多久,所以程序無限地運行,直到用戶選擇退出。在這些情況下使用的簡單條件顯然是一個總是被滿足的條件。下面是一個無限循環(huán)的例子,為了方便起見,還是內(nèi)置了一個安全陷阱:
n = 0
while true do
print(n)
n = n+1
if n > 100 then
break
end
end
條件 ??while true?? 總是被滿足,因為 ??true?? 總是為真。這是比寫 ??while 1 == 1?? 或類似的永遠為真的簡潔方式。
Lua 中的循環(huán)
從示例代碼中可以看出,盡管有不同的實現(xiàn)方式,但循環(huán)基本上都是朝著同一個目標工作。選擇一個對你來說有意義的,并且在你需要執(zhí)行的處理過程中效果最好的。以防萬一你需要它:終止失控循環(huán)的鍵盤快捷鍵是 ??Ctrl+C??。
網(wǎng)站題目:Lua循環(huán):如何使用while和repeatuntil
標題來源:http://www.dlmjj.cn/article/dhejdjd.html


咨詢
建站咨詢
