1.Lua特性:
a.輕量級(小巧腳本語言、方便嵌入其他程序)
b.擴展性(可通過外部庫擴展)
c.跨平臺
d.支持面向過程編程、函數式編程
e.自動內存管理(只提供一種通用類型表-table)
f.語言內置模式匹配(closure、函數也是一種值、多線程支持-協同進程,並非系統所支持的線程)
g.通過closure和table可以支持面向對象編程
2.Lua基本語法(要點):
單行註釋:
--
多行註釋:
--[[
--]]
標識符:
最好不使用下劃線加大寫字母的標識符
21個關鍵詞:
and break do else elseif end false for function if in local nil not or repeat return then true until while
注:一般約定以下劃線加大寫字符串的名字(如_VERSION)保留爲Lua內部局部變量
全局變量:
a.默認情況下,變量總是全局的
b.全局變量不需要聲明,且未初始化不會出錯,但結果是nil
c.要刪除一個全局變量,可將nil賦給該變量
3.Lua數據類型
nil boolean number string function userdata thread table
注:
a.string可以使用[[ ]]表示整塊的字符串
b.字符串連接使用 ..
c.可用#計算字符串長度
d.table的創建可通過構造表達式來完成,最簡單爲{},創建空表,也可直接添加數據初始化
e.table可視爲數組,數組索引可爲數字或字符串,默認初始索引以1開始
f.table不會固定長度大小
g.function可存在變量裏
h.協同程序與線程差不多,擁有獨立的棧、局部變量、指令指針,可與其他協程共享全局變量等。但線程可以同時多個運行,但協程任意時刻只能運行一個,並且處於運行狀態的協程只有被掛起時纔會被暫停
i.在 Lua 中對 0(number) 進行邏輯判斷,得到的結果是 true
4.Lua變量
a.Lua 中的變量全是全局變量,無論語句塊或是函數裏,除非用 local 顯式聲明爲局部變量,變量默認值均爲nil
b.Lua可以對多個變量同時賦值,變量列表和值列表的各個元素用逗號分開,賦值語句右邊的值會依次賦給左邊的變量.
a, b = 10, 2*x <--> a=10; b=2*x
c.應該儘可能的使用局部變量(可避免命名衝突、速度更快)
5.Lua函數
a.函數支持同時返回多個值
b.函數可接受可變數目的參數
function add(...)
c.閉包函數是指將一個函數寫在另一個函數之內,內部函數可以訪問外部函數的局部變量。內部函數沒有名稱,通常也叫匿名函數
function newCounter()
local i = 0
return function()
i=i+1
return i
end
end
c1 = newCounter()
print(c1()) --> 1
print(c1()) --> 2
6.Lua運算符(要點)
a.邏輯運算-與或非:and or not
b.關係運算-不等於:~=
c.運算符優先級
從高到低的順序:
^
not - (unary)
* /
+ -
..
< > <= >= ~= ==
and
or
7.table = 數組+映射(博客摘錄)
1)數組
①a = {}
a[1]=1
a[2]=5
a[3]="hello"
print(a[1],a[2],a[3])
②a = {1,5,"hello"}
print(a[1],a[2],a[3])
這兩種定義方式效果一樣。
2)映射
類似於C語言中的map,[]裏面的是key值。(數據庫的table)
①a= {}
a["hello"]=2
a[3]=false
print(a.hello,a[3])
②a={["hello"]=2,[3]=false}
print(a.hello,a[3])
這兩種定義方式效果一樣。
8.迭代器之數組遍歷:
for k,v in ipairs(t) do ... end
迭代器之Table遍歷:
for k,v in pairs(t) do ... end
資料參考:
https://blog.csdn.net/u013047859/article/details/51232768(Lua核心編程之基礎)
https://blog.csdn.net/u013047859/article/details/51234245(Lua核心編程之進階&總結)
https://blog.csdn.net/xuzhonghai/article/details/7297560(大體瞭解Lua的語法)