自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Lua 循環(huán):如何使用 while 和 repeat until

開(kāi)發(fā)
學(xué)習(xí)如何以及何時(shí)在 Lua 中使用 while 和 repeat until 循環(huán)。

控制結(jié)構(gòu)是編程語(yǔ)言的一個(gè)重要特征,因?yàn)樗鼈兪鼓隳軌蚋鶕?jù)通常在程序運(yùn)行時(shí)動(dòng)態(tài)建立的條件來(lái)指導(dǎo)程序的流程。不同的語(yǔ)言提供了不同的控制,在 Lua 中,有 ??while??? 循環(huán)、??for??? 循環(huán)和 ??repeat??? ??until??? 循環(huán)。這篇文章涵蓋了 ??while??? 和 ??repeat until??? 循環(huán)。由于它們的靈活性,我在一篇 ??單獨(dú)的文章??? 中介紹 ??for?? 循環(huán)。

條件是由一個(gè)使用運(yùn)算符的表達(dá)式來(lái)定義的,運(yùn)算符是你在數(shù)學(xué)課上可能認(rèn)識(shí)的符號(hào)的一個(gè)花哨的術(shù)語(yǔ)。Lua 中有效的運(yùn)算符有:

  • ??==?? 等于
  • ??~=??不等于
  • ??<?? 小于
  • ??>?? 大于
  • ?????小于或等于
  • ??>=?? 大于或等于

這些被稱為關(guān)系運(yùn)算符,因?yàn)樗鼈儽容^兩個(gè)值之間的關(guān)聯(lián)。還有一些邏輯運(yùn)算符,其含義與英語(yǔ)中的含義相同,可以納入條件中,進(jìn)一步描述你想檢查的狀態(tài):

  • ??and??
  • ??or??

下面是一些條件的例子:

  • ??foo > 3??:變量 ??foo?? 是否大于 3???foo?? 必須是 4 或更大才能滿足這個(gè)條件。
  • ??foo >= 3??:??foo?? 是否大于或等于 3???foo?? 必須是 3 或更大才能滿足這個(gè)條件。
  • ??foo > 3 and bar < 1??:??foo?? 是否大于 3 而 ??bar?? 小于 1?要滿足這個(gè)條件,??foo?? 變量必須在 ??bar?? 為 0 的同時(shí)為 4 或更大。
  • ??foo> 3 or bar < 1??:??foo?? 是否大于 3?或者,??bar?? 是否小于 1?如果 ??foo?? 是 4 或更大,或者 ??bar?? 是 0,那么這個(gè)條件就是真的。如果 ??foo?? 是 4 或更大,而 ??bar?? 是 0,會(huì)怎樣?答案出現(xiàn)在本文的后面。

While 循環(huán)

只要滿足某個(gè)條件,while 循環(huán)就會(huì)執(zhí)行指令。例如,假設(shè)你正在開(kāi)發(fā)一個(gè)應(yīng)用來(lái)監(jiān)測(cè)正在進(jìn)行的僵尸末日。當(dāng)沒(méi)有剩余的僵尸時(shí),就不再有僵尸末日了:

zombie = 1024

while (zombie > 0) do
print(zombie)
zombie = zombie-1
end
if zombie == 0 then
print("No more zombie apocalypse!")
end

運(yùn)行代碼,看僵尸消失:

$ lua ./while.lua
1024
1023
[...]
3
2
1
No more zombie apocalypse!

until 循環(huán)

Lua 還有一個(gè) ??repeat?? ??until?? 循環(huán)結(jié)構(gòu),本質(zhì)上是一個(gè)帶有 ??catch?? 語(yǔ)句的 ??while?? 循環(huán)。假設(shè)你在從事園藝工作,你想追蹤還剩下什么可以收獲的東西:

mytable = { "tomato", "lettuce", "brains" }
bc = 3
repeat
print(mytable[bc])
bc = bc - 1
until( bc == 0 )

運(yùn)行代碼:

$ lua ./until.lua
brains
lettuce
tomato

這很有幫助!

無(wú)限循環(huán)

一個(gè)無(wú)限循環(huán)有一個(gè)永遠(yuǎn)無(wú)法滿足的條件,所以它無(wú)限地運(yùn)行。這通常是一個(gè)由錯(cuò)誤邏輯或你的程序中的意外狀態(tài)引起的錯(cuò)誤。例如,在本文的開(kāi)頭,我提出了一個(gè)邏輯難題。如果一個(gè)循環(huán)被設(shè)定為 ??foo > 3 or bar < 1?? 運(yùn)行 ,那么當(dāng) ??foo?? 為 4 或更大而 ??bar?? 為 0 時(shí),會(huì)發(fā)生什么?

下面是解決這個(gè)問(wèn)題的代碼,為了以防萬(wàn)一,還使用了 ??break?? 語(yǔ)句安全捕獲:

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

你可以安全地運(yùn)行這段代碼,但它確實(shí)模仿了一個(gè)意外的無(wú)限循環(huán)。有缺陷的邏輯是 ??or?? 運(yùn)算符,它允許這個(gè)循環(huán)在 ??foo?? 大于 3 和 ??bar?? 小于 1 的情況下繼續(xù)進(jìn)行。??and?? 運(yùn)算符有不同的效果,但我讓你去探索。

無(wú)限循環(huán)實(shí)際上有其用途。圖形應(yīng)用使用技術(shù)上的無(wú)限循環(huán)來(lái)保持應(yīng)用程序窗口的開(kāi)放。我們沒(méi)有辦法知道用戶打算使用這個(gè)程序多久,所以程序無(wú)限地運(yùn)行,直到用戶選擇退出。在這些情況下使用的簡(jiǎn)單條件顯然是一個(gè)總是被滿足的條件。下面是一個(gè)無(wú)限循環(huán)的例子,為了方便起見(jiàn),還是內(nèi)置了一個(gè)安全陷阱:

n = 0
while true do
print(n)
n = n+1
if n > 100 then
break
end
end

條件 ??while true?? 總是被滿足,因?yàn)?nbsp;??true?? 總是為真。這是比寫 ??while 1 == 1?? 或類似的永遠(yuǎn)為真的簡(jiǎn)潔方式。

Lua 中的循環(huán)

從示例代碼中可以看出,盡管有不同的實(shí)現(xiàn)方式,但循環(huán)基本上都是朝著同一個(gè)目標(biāo)工作。選擇一個(gè)對(duì)你來(lái)說(shuō)有意義的,并且在你需要執(zhí)行的處理過(guò)程中效果最好的。以防萬(wàn)一你需要它:終止失控循環(huán)的鍵盤快捷鍵是 ??Ctrl+C??。

責(zé)任編輯:龐桂玉 來(lái)源: Linux中國(guó)
相關(guān)推薦

2023-08-21 12:31:41

BashForWhile

2021-03-24 13:17:41

編程循環(huán)語(yǔ)句Java

2023-09-01 09:19:40

CSS函數(shù)模式

2021-12-09 23:20:31

Python循環(huán)語(yǔ)句

2024-02-26 12:13:32

C++開(kāi)發(fā)編程

2021-06-07 06:10:22

C++While循環(huán)For 循環(huán)

2009-11-10 11:30:12

VB.NET循環(huán)語(yǔ)句

2009-07-21 14:03:00

Scalaif表達(dá)式while循環(huán)

2010-09-08 17:00:22

SQLWHILE循環(huán)

2010-03-19 14:18:07

Java Socket

2022-12-08 09:56:22

Luafor 循環(huán)

2010-03-16 11:05:53

Java while循

2010-01-07 15:42:57

VB.NET WhilEnd While循環(huán)

2010-03-12 13:44:31

Python whil

2022-09-30 07:32:48

循環(huán)while循環(huán)體

2010-09-09 16:34:19

SQL循環(huán)while

2010-09-10 14:44:27

SQLROW_NUMBER(循環(huán)

2022-01-27 09:35:45

whiledo-while循環(huán)Java基礎(chǔ)

2020-11-13 07:22:46

Java基礎(chǔ)While

2020-12-11 05:57:01

Python循環(huán)語(yǔ)句代碼
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)