昨天写bug的时候碰到一个问题
function Mgr:test()
local _ser = {}
_ser = self.dataAgent:GetData("newHuntServerData") --赋值
_ser[1].rewards[13] = 1-- 数值修改
ssprint_error(_ser)
ssprint_error(self.dataAgent:GetData("newHuntServerData"))
end
做完第二行的数值修改操作后,发现 newHuntServerData居然也被修改到了。原因:lua中表赋值是引用关系
解决:
function clone(org)
local function copy(org, res)
for k,v in pairs(org) do
if type(v) ~= "table" then
res[k] = v;
else
res[k] = {};
copy(v, res[k])
end
end
end
local res = {}
copy(org, res)
return res
end
function Mgr:test()
local _ser = {}
_ser = clone(self.dataAgent:GetData("newHuntServerData")) -- 赋值
_ser[1].rewards[13] = 1 --数值修改
ssprint_error(_ser)
ssprint_error(self.dataAgent:GetData("newHuntServerData"))
end
用clone拷贝代替直接赋值,这样出来的就不是引用关系了。不会修改到 newHuntServerData