table 中的可以元素(類似數組)或者鍵值對,實際上lua內部採用哈希表和數組分別保存鍵值對、普通值,所有不推薦混合使用這兩種賦值方式。
table中不要使用nil元素
table判斷是否爲空
function isTableEmpty(t)
return t == nil or next(t) == nil
end
注意: next 指令是不能被 LuaJIT 的 JIT 編譯優化,並且 LuaJIT 貌似沒有明確計劃支持這
個指令優化,在不是必須的情況下,儘量少用。
cjson.encode(nil) = null
cjson.decode(nil)= nil
4.函數的參數
按值傳遞
Lua函數的參數大部分是按值傳遞的。值傳遞就是調用函數時,實參把它的值通過賦值運算傳遞給形參,然後形參的改變和實參就沒有關係了。在這個過程中,實參是通過它在參數表中的位置與形參匹配起來的。
在調用函數的時候,若形參個數和實參個數不同時,Lua會自動調整實參個數。調整規則:若實參個數大於形參個數,從左向右,多餘的實參被忽略;若實參個數小於形參個數,從左向右,沒有被實參初始化的形參會被初始化爲nil。
變長參數
上面函數的參數都是固定的,其實Lua還支持變長參數。若形參爲 ... ,表示該函數可以接收不同長度的參數。訪問參數的時候也要使用 ...
具名參數
Lua 還支持通過名稱來指定實參,這時候要把所有的實參組織到一個table中,並將這個table作爲唯一的實參傳給函數。
按址傳遞
當函數參數是table類型時,傳遞進來的是table在內存中的地址,這時在函數內部對table所做的修改,不需要使用return返回,就是有效的。
在常用基本類型中,除了table是按址傳遞類型外,其它的都是按值傳遞參數。
用全局變量來代替函數參數的不好編程習慣應該被抵制,良好的編程習慣應該是減少全局變量的使用。