歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

總結Lua使用中遇到的小問題

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 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved