Lua—表達式以及各類語句

1.if then else end 

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

2.while 

當條件爲真時while循環會重複執行其循環體。lua語言先測試while語句的條件,條件爲假時則循環結束。否做,lua會執行循環體並不斷重複這個過程。 編程語言

local i = 1
while a[i] > 0 do 
    print(a[i])
    i = i +1;
end 
複製代碼

3.repeat-until repeat-until 

語句會重複執行其循環體直到條件真時結束。因爲條件測試在循環體以後執行,因此循環體至少會執行一次。 函數

--輸出第一個非空的行 測試

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

4.數值型for 

for語句有兩種形式:數值型for和泛型for orm

數值型for: for var = exp1, exp2, exp3 do something endip

在這種循環中, var 值從 exp1變化到 exp2 前的每次循環會執行 something ,並在每次循環結束後將步長 exp3 加到 var上,第三個表達式 exp3 是可選的,若不存在,lua 語言會默認步長值爲1,若是不想給循環設置上限,可使用常 math.huge: 按順序遍歷。

pairs和ipairs的區別:

  • pairs迭代器遍歷表中的鍵值對,順序隨機且每次運行時產生不一樣的順序。遍歷過程當中每一個元素只會出現一次。
  • ipairs迭代器遍歷列表,按順序遍歷,每一個元素也只會出現一次 

鍵值對:table1 = {[「name」] = 「tom」, [「age」] = 18, [「sex」] = 「female」} 

列表:table2 = {1, 2, 3};  

5.break、return和goto 

break和return語句用於從當前的循環結構中跳出,goto語句則容許跳轉到函數中的幾乎任何地方。 

break 

咱們可使用break語句結束循環,該語句會中斷包含它的內層循環(例如for、repeat或者while);該語句不能在循環外使用。break中斷後,程序會緊接着被中斷的循環繼續執行。 

return 

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的語法很是傳統,即保留字goto後面緊跟着標籤名。 標籤名語法:標籤名稱先後各緊跟兩個冒號,形如::name::。這個複雜的語法是有意而爲的,目的是爲了在程序中形目地突出這些標籤。 

在使用goto語句時,lua語言設置了一些限制條件:

  • 首先,標籤遵循常見的可見性規則。思考:能夠直接跳轉到一個代碼塊中的標籤嗎或者goto能夠跳轉到函數內嗎?爲何(不能夠,由於代碼塊中的標籤對外不可見。) 
  • 其次,goto不能跳轉到函數外。 
  • 最後,goto不能跳轉到局部變量的做用域。

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的做用域內。

相關文章
相關標籤/搜索