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