Lua可以被C/C++ 代碼調用,反過來也可以調用C/C++的函數,這使得Lua被廣泛應用。Lua由標准C編寫而成,代碼簡潔優美,幾乎在所有操作系統和平台上都可以編譯,運行。Lua在目前解釋型腳本引擎中,速度是最快的,這決定了Lua嵌入式腳本的最佳選擇。文章列舉lua使用中遇到的小問題,做個匯總。
if判斷
lua把 nil 和false 視為“假”,其他都為“真”
local變量聲明
local var1=1,var2
以上 ,var1和var2的作用域不同,var1是所在作用域的變量,var2可能是全局變量。實際上述命令解釋後為 var1 取 "1,var2" 組成的值第一個值,類似 local var1 = ...
正確的寫法是:
local var1, var2=1
table是否為空
if a == {} then
結果是false,這是一個邏輯錯誤,實際比較table a的內存地址和一個匿名table的是否相同
正確的寫法是:
if next(a) == nil then
多個變量賦值
name,name = 1,2
那name等於多少呢?
實際上name值為1,可以寫個小例子 a,b = 2,3,4打印匯編碼就可以看到了。 方法:luac -l test.lua
table的key規則
t[name]與t["name"], t.name
第一種和後兩種是不同的,第一種會根據取name的值做key,後兩種以 "name"做key。這種情況還有:
t = {[name] = 1}
t = {name = 1}
t = {["name"] = 1}
table引用問題
將一個table復制給另外一個table,修改這個新的table值會影響原來的table,但通過clone可以改變這一行為。
-- 下面的代碼,t2 是 t1 的引用,修改 t2 的屬性時,t1 的內容也會發生變化
local t1 = {a = 1, b = 2}
local t2 = t1
t2.b = 3 -- t1 = {a = 1, b = 3} <-- t1.b 發生變化
-- clone() 返回 t1 的副本,修改 t2 不會影響 t1
local t1 = {a = 1, b = 2}
local t2 = clone(t1)
t2.b = 3 -- t1 = {a = 1, b = 2} <-- t1.b 不受影響
這裡也補充一個深度復制的函數:
function table.deepcopy(object)
local lookup_table = {}
local function _copy(object)
if type(object) ~= "table" then
return object
elseif lookup_table[object] then
return lookup_table[object]
end
local new_table = {}
lookup_table[object] = new_table
for index, value in pairs(object) do
new_table[_copy(index)] = _copy(value)
end
return setmetatable(new_table, getmetatable(object))
end
return _copy(object)
end
函數返回值
> function f123() return 1, 2, 3 end
> function f456() return 4, 5, 6 end
> print(f123(), f456())
1 4 5 6
> print(f456(), f123())
4 1 2 3
> print(f456())
4 5 6
> print(f456(),1)
4 1
如果函數不是處於列的最後一個,只返回一個值
Lua 語言 15 分鐘快速入門 http://www.linuxidc.com/Linux/2013-06/86582.htm
Lua程序設計(第2版)中文 PDF http://www.linuxidc.com/Linux/2013-03/81833.htm
Lua程序設計(第二版)閱讀筆記 http://www.linuxidc.com/Linux/2013-03/81834.htm
NetBSD 將支持用 Lua 腳本開發內核組件 http://www.linuxidc.com/Linux/2013-02/79527.htm
CentOS 編譯安裝 Lua LuaSocket http://www.linuxidc.com/Linux/2011-08/41105.htm
Programming In Lua 高清PDF中文版 http://www.linuxidc.com/Linux/2015-05/117362.htm
Lua 的詳細介紹:請點這裡
Lua 的下載地址:請點這裡