table.unpack遇到的問題
做了箇中轉的服務, socket+json 傳遞數據,
通過 {...} 封裝不定參數然後 json.encode 傳遞到其他服務器,
然後其他服務器 json.decode之後再通過 table.unpack 解出之前 {...} 裏面的參數,
如果這裏是 table 還好,如果這裏面是 n 個整型數據的話,後面會多了個 .0 。
例如, 1 會被轉成 1.0,這會帶來一些麻煩。
調查了許久,發現不是 json 導致的,而是在 table.unpack 導致的,
所以根據網上找到的方法,重寫了一個 unpack 的方法以及一個判斷數組的方法,如下:
function util.unpack(t,i)
i = i or 1
if t[i] ~= nil then
if type(t[i]) == "number" and t[i]%1 == 0 then
t[i] = t[i] >> 0
end
return t[i],util.unpack(t,i+1)
end
end
--檢查是否是數組類型
function util.checkArray(a)
if type(a) ~= "table" then return false end
local count = 0
for k,v in pairs(a) do
if type(k) ~= "number" then return false end
count = count + 1
end
for i=1,count do
if not a[i] and type(a[i]) ~= "nil" then return false end
end
return true
end