賦值語(yǔ)句
注釋?zhuān)瑔涡杏?--)來(lái)表示;多行用(--[[ ... ]])來(lái)標(biāo)示;
定義,lua中沒(méi)有定義(申明數(shù)據(jù)類(lèi)型),它是通過(guò)賦值來(lái)確定其數(shù)據(jù)類(lèi)型的。
賦值,是改變一個(gè)變量的值和改變表域的最基本的方法。 a = "hello" .. "world"
Lua可以對(duì)多個(gè)變量同時(shí)賦值,變量列表和值列表的各個(gè)元素用逗號(hào)分開(kāi),賦值語(yǔ)句右邊的值會(huì)依次賦給左邊的變量。a, b = 10, 2*x <--> a=10; b=2*x
遇到賦值語(yǔ)句Lua會(huì)先計(jì)算右邊所有的值然后再執(zhí)行賦值操作,所以我們可以這樣進(jìn)行交換變量的值:
當(dāng)變量個(gè)數(shù)和值的個(gè)數(shù)不一致時(shí),Lua會(huì)一直以變量個(gè)數(shù)為基礎(chǔ)采取以下策略:
a. 變量個(gè)數(shù)>值的個(gè)數(shù)按變量個(gè)數(shù)補(bǔ)足nil ;b. 變量個(gè)數(shù)<值的個(gè)數(shù)多余的值會(huì)被忽略
多值賦值經(jīng)常用來(lái)交換變量,或?qū)⒑瘮?shù)調(diào)用返回給變量: a, b = f() --f()返回兩個(gè)值,第一個(gè)賦給a,第二個(gè)賦給b。
表達(dá)式
表達(dá)式---是表達(dá)式就需要運(yùn)算符。
1.算術(shù)運(yùn)算符:+-*/^(加減乘除冪,二元運(yùn)算符),-(負(fù)值,一元運(yùn)算符);操作跟C++一樣
2.關(guān)系運(yùn)算符:<、>、<=、>=、==、~=(不等于);這些操作符返回結(jié)果為false或者true;==和~=比較兩個(gè)值,如果兩個(gè)值類(lèi)型不同,Lua認(rèn)為兩者不同;nil只和自己相等。Lua通過(guò)引用比較tables、userdata、functions。也就是說(shuō)當(dāng)且僅當(dāng)兩者表示同一個(gè)對(duì)象時(shí)相等。
3.邏輯運(yùn)算符:and、or、not;邏輯運(yùn)算符認(rèn)為false和nil是假(false),其他為真,0也是true.
and和or的運(yùn)算結(jié)果不是true和false,而是和它的兩個(gè)操作數(shù)相關(guān)。a and b -- 如果a為false,則返回a,否則返回b ;a or b -- 如果a為true,則返回a,否則返回b ;想想堆棧,若第一個(gè)變量就可以判斷出真假,就不需要判斷第二個(gè)變量了。
and的優(yōu)先級(jí)比or高。
C語(yǔ)言中的三元運(yùn)算符,a ? b : c ==>>在Lua中可以這樣實(shí)現(xiàn): (a and b) or c
not的結(jié)果一直返回false或者true
4.連接運(yùn)算符:.. (兩個(gè)點(diǎn));如果操作數(shù)為數(shù)字,Lua將數(shù)字轉(zhuǎn)成字符串。
流程控制
控制結(jié)構(gòu)的條件表達(dá)式結(jié)果可以是任何值,Lua認(rèn)為false和nil為假,其他值為真。
do..end(相當(dāng)于c/c++的{})
if語(yǔ)句,有三種形式
由于Lua不支持switch語(yǔ)句,所以這種一連串的if-else if代碼很常見(jiàn)的。
while語(yǔ)句
repeat-until語(yǔ)句
條件判斷是在循環(huán)體之后做的,因此循環(huán)體至少會(huì)執(zhí)行一次。類(lèi)似于C++中的,do..while()
for語(yǔ)句
數(shù)字型for(number for)
泛型for(generic for),泛型for循環(huán)通過(guò)一個(gè)迭代器(iterator)函數(shù)類(lèi)遍歷所有值。
Lua的基礎(chǔ)庫(kù)提供了ipairs,這是一個(gè)用于遍歷數(shù)組的迭代器函數(shù)。在每次循環(huán)中,i會(huì)被賦予一個(gè)索引值,同時(shí)v被賦予一個(gè)對(duì)應(yīng)該索引的數(shù)組元素值。
for k in pairs(days) do print(k) end --1234567
for k in pairs(revDays) do print(k) end
標(biāo)準(zhǔn)庫(kù)提供了幾種迭代器,包括用于迭代文件中每行的(io.lines)、迭代table元素的(pairs)、迭代數(shù)組元素的(ipairs)、迭代字符串中單詞的(string.gmatch)等。
break和return語(yǔ)句
函數(shù)
函數(shù)定義:用關(guān)鍵字function定義函數(shù),以關(guān)鍵字end結(jié)束
局部變量:用關(guān)鍵字local定義。如果沒(méi)有用local定義,即使在函數(shù)內(nèi)部定義的變量也是全局變量!
函數(shù)可以返回多個(gè)值:return a, b, c, ...
平行賦值:a, b = c, d
全局變量:前面的代碼定義了三個(gè)全局變量:foo、r1和r2
新聞熱點(diǎn)
疑難解答
圖片精選