前言
學(xué)習(xí)一門語言,首先就是從最基本的語法開始,這一篇將對Lua中的語句進(jìn)行概要的總結(jié)。
賦值
賦值的基本含義是修改一個(gè)變量或一個(gè)table中字段的值,這個(gè)和其它語言沒有多少區(qū)別,但是對于Lua,有一個(gè)特性,它允許“多重賦值”,也就是一下子將多個(gè)值賦予多個(gè)變量,例如以下代碼:
復(fù)制代碼 代碼如下:
local x1, x2 = 2, 4
print(x1) -->2
print(x2) -->4
在多重賦值中,Lua先對等號右邊的所有元素求值,然后才執(zhí)行賦值,例如以下用法,可以非常簡便的交換兩個(gè)元素的值:
復(fù)制代碼 代碼如下:
local x1, x2 = 2, 4
x1, x2 = x2, x1
print(x1) -->4
print(x2) -->2
Lua總是會將等號右邊值得個(gè)數(shù)調(diào)整到與左邊變量的個(gè)數(shù)相一致,規(guī)則是:如果值得個(gè)數(shù)少于變量的個(gè)數(shù),那么多余的變量會被賦為nil;如果值得個(gè)數(shù)更多的話,那么多余的值會被忽略掉。
局部變量與塊
相對于全局變量,Lua同時(shí)也提供了局部變量。通過local語句來創(chuàng)建局部變量:
復(fù)制代碼 代碼如下:
i = 10 -->全局變量
local i = 10 -->局部變量
在Lua中,局部變量也是有作用范圍的,也就是說,出了局部變量的作用范圍,局部變量就會失去作用,這個(gè)和C++等高級語言是一樣的道理。我們在編程的過程中,也可以使用do…end來顯示的聲明一個(gè)塊,例如以下代碼:
復(fù)制代碼 代碼如下:
do
local a1 = 10
local a2 = 10
end -->a1和a2的作用域到此結(jié)束
至于使用局部變量和全局變量,關(guān)系到編程風(fēng)格和實(shí)際需要,這里不做多說。
控制結(jié)構(gòu)
幾乎所有的語言都有控制結(jié)構(gòu),同樣,對于Lua的控制結(jié)構(gòu)是非常簡單的。Lua提供了用于條件執(zhí)行的if,循環(huán)的while、repeat和for。所有的控制結(jié)構(gòu)都有一個(gè)顯式的終止符:if、for和while以end作為結(jié)尾,repeat以until作為結(jié)尾。特別注意,在Lua中是不支持switch結(jié)構(gòu)的。
if then else
if語句先測試其條件,然后根據(jù)測試結(jié)果執(zhí)行then部分或者else部分,else部分是可選的。如果要編寫嵌套的if,可以使用elseif,下面通過代碼示例來說明if的使用。
復(fù)制代碼 代碼如下:
if a 0 then a = 0 end
if a b then retuan a else return b 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
end
while
Lua中的while與其它語言是一樣的,示例代碼如下:
復(fù)制代碼 代碼如下:
local a = 10
while a > 0 do
a = a - 1
-- Do something else
end
repeat
repeat就好比C++中的do…while結(jié)構(gòu),循環(huán)體至少會執(zhí)行一次。repeat-until語句重復(fù)執(zhí)行其循環(huán)體直到條件為真時(shí)結(jié)束。
在Lua中有兩種for語句的形式:數(shù)字型for和泛型for
數(shù)字型for
數(shù)字型for的語法如下:
復(fù)制代碼 代碼如下:
for var = exp1, exp2, exp3 do
-- Do something
end
var從exp1變化到exp2,每次變化都以exp3作為步長進(jìn)行遞增,并執(zhí)行一次do…end之間的代碼。第三個(gè)表達(dá)式exp3是可選的,若不指定的話,Lua會將步長默認(rèn)為1。例如以下代碼:
復(fù)制代碼 代碼如下:
for var = 1, 10 do
print(var)
end
for var = 10, 1, -1 do
print(var)
end
在使用for時(shí),需要注意以下兩點(diǎn):
1.for的exp1,exp2和exp3,這三個(gè)表達(dá)式是在循環(huán)開始前一次性求值得;并不會每次循環(huán)都進(jìn)行求值;
2.控制變量var會被自動的聲明為for語句的局部變量,并且僅在循環(huán)體內(nèi)可見。
泛型for
泛型for循環(huán)通過一個(gè)迭代器函數(shù)來遍歷所有值。在Lua的基礎(chǔ)庫中提供了ipairs,這是一個(gè)用于遍歷數(shù)組的迭代器函數(shù)。從外觀上看泛型for比較簡單,但其實(shí)它是非常強(qiáng)大的。通過不同的迭代器,幾乎可以遍歷所有的東西。標(biāo)準(zhǔn)庫提供了幾種迭代器,包括用于迭代文件中每行的io.lines、迭代table元素的pairs、迭代數(shù)組元素的ipairs和迭代字符串中單詞的string.gmatch等。當(dāng)然了,我們也可以編寫自己的迭代器,在以后的文章中,我會總結(jié)如何編寫迭代器的。
break與return
break和return語句用于跳出當(dāng)前的塊。這里的break、return和C++等語言是一樣的。break語句用于結(jié)束一個(gè)循環(huán),return語句用于從一個(gè)函數(shù)中返回結(jié)果。
您可能感興趣的文章:- Lua中基本的數(shù)據(jù)類型、表達(dá)式與流程控制語句講解
- Lua中的控制結(jié)構(gòu)(流程控制)簡明總結(jié)
- Lua基礎(chǔ)教程之賦值語句、表達(dá)式、流程控制、函數(shù)學(xué)習(xí)筆記
- Lua和C++的通信流程代碼實(shí)例
- Lua和C++的通信流程分解
- Lua中的變量和流控制入門學(xué)習(xí)
- Lua表達(dá)式和控制結(jié)構(gòu)學(xué)習(xí)筆記
- Lua流程控制語句if else的使用示例