原因:
local
的變量會在作用域結(jié)束時釋放其內(nèi)存local
的變量會比全局變量的存取更快
-- 不推薦
if obj ~= nil and willBreak == false then
????-- ...
end
-- 推薦
if obj and not willBreak then
????-- ...
end
原因:Lua在邏輯判斷時將所有非false
和nil
的邏輯判斷視為真,反之視為假,不需要再與布爾值和nil
進(jìn)行比對。
但是,在需要對false
和nil
進(jìn)行區(qū)分時,需要寫明==
:obj == nil
和obj == false
。
范式:param = param or defaultValue
function setName(name)
????name = name or 'noName'
????-- ...
end
原因:or
會在第一次為true
的時候斷路,返回其判斷的最后一個值。所以當(dāng)name
為空時,name or 'noName'
返回為'noName'
,這會將name
的值自動設(shè)置為noName
。
u = {unpack(t)}
用#t == 0
并不能判斷表是否為空,因為#
預(yù)算符會忽略所有不連續(xù)的數(shù)字下標(biāo)和非數(shù)字下標(biāo)。
正確做法是:
if next(t) == nil then
????-- 表為空
????-- ...
end
因為表的鍵可能為false
,所以必須與nil
比較,而不直接使用~next(t)
來判斷表是否空。
-- 更慢,不推薦
table.insert(t, value)
-- 更快,推薦
t[#t+1] = value
原因:[]和#
避免了高層的函數(shù)調(diào)用開銷。
更多建議: