if 語句先測試其條件,並根據條件是否知足執行條件相應的then部分或else部分。else部分是可選的。 編程
if a < 0 then a = 0 end
if a < b then return a else return b end
if a < b then rerurn a elsif a == b then return 0 else return b end
複製代碼
若是要編寫嵌套的if語句可使用else-if,能夠避免重複使用end lua語言不支持switch語句,因此這種一連串的else-if語句比較常見markdown
當條件爲真時while循環會重複執行其循環體。lua語言先測試while語句的條件,條件爲假時則循環結束。否做,lua會執行循環體並不斷重複這個過程。 編程語言
local i = 1
while a[i] > 0 do
print(a[i])
i = i +1;
end
複製代碼
語句會重複執行其循環體直到條件真時結束。因爲條件測試在循環體以後執行,因此循環體至少會執行一次。 函數
--輸出第一個非空的行 測試
local line
repeat
line = io.read()
until line ~=「」
print(line)
複製代碼
和其餘大多數其餘編程語言不一樣,在lua語言中,循環體內聲明的局部變量的做用域包括測試條件 lua
#include <stdio.h>
int main(void)
{
int count = 0; //在外部塊中聲明
do
{
int count = 0;
++count;
printf(「count = %d\n」,count);
}while(++count <= 5);
printf(「count = %d\n」, count)
system(「pause」)
return 0;
}
複製代碼
輸出內容爲:spa
count = 1
count = 1
count = 1
count = 1
count = 1
count = 1
count = 6
複製代碼
循環測試條件中使用的count是外部塊中聲明的,若是使用lua則使用循環體內聲明的count code
for語句有兩種形式:數值型for和泛型for orm
數值型for: for var = exp1, exp2, exp3 do something end
ip
在這種循環中, var 值從 exp1變化到 exp2 前的每次循環會執行 something ,並在每次循環結束後將步長 exp3 加到 var上,第三個表達式 exp3 是可選的,若不存在,lua 語言會默認步長值爲1,若是不想給循環設置上限,可使用常 math.huge: 按順序遍歷。
pairs和ipairs的區別:
鍵值對:table1 = {[「name」] = 「tom」, [「age」] = 18, [「sex」] = 「female」}
列表:table2 = {1, 2, 3};
break和return語句用於從當前的循環結構中跳出,goto語句則容許跳轉到函數中的幾乎任何地方。
咱們可使用break語句結束循環,該語句會中斷包含它的內層循環(例如for、repeat或者while);該語句不能在循環外使用。break中斷後,程序會緊接着被中斷的循環繼續執行。
return語句用於返回函數的執行結果或簡單地結束函數的運行。全部函數的最後都有一個隱含的return,所以咱們不須要在每個沒有返回值的函數最後書寫return語句。
local i = 1;
while a[i] do
if a[i] == v then return i end
i = i +1
end
print(i)
複製代碼
思考:a={1,2,3},v=1,那麼i打印出來是什麼?v=4呢?
答案:當v=1時,沒法打印出i;當v=4時,打印出的i爲4。
goto語句用於當前程序跳轉到相應的標籤處繼續執行。goto的語法很是傳統,即保留字goto後面緊跟着標籤名。 標籤名語法:標籤名稱先後各緊跟兩個冒號,形如::name::。這個複雜的語法是有意而爲的,目的是爲了在程序中形目地突出這些標籤。
在使用goto語句時,lua語言設置了一些限制條件:
lua語言規範中一個頗有用的細節是,局部變量的做用域終止於聲明變量的代碼塊中的最後一個有效語句處,標籤被認爲是無效語句。
while some_condition do
if some_other_conditon then goto continue end
local var = something
some code
::continue::
end
複製代碼
思考:這個goto語句跳轉到了變量var的做用域內嗎?
答案:沒有,由於這個continue標籤出如今該代碼塊的最後一個有效語句後,所以goto並未跳轉進入變量var的做用域內。