有时候在lua里会用到深拷贝
基本思路很简单,就是非table类型直接引用,table去做遍历
但是在项目开发过程中有时候需要用到宿主程序的userdata
这个就很蛋疼了
查了一下,似乎没有针对userdata的深拷贝实现
我有个想法,大概可以写一个工具把需要代理给lua的数据结构映射成一个索引table
深拷贝的时候去拿这个索引做
感觉似乎是可行的,如果项目有需要可以研究下
function DeepCopy(obj)
local tbTab={}
local function Copy(obj)
if type(obj)~="table" then
return obj
end
--如果是这个对象已经做过拷贝就直接返回
--保证引用一致
if tbTab[obj] then
return tbTab[obj]
end
local newTable = {}
tbTab[obj]=newTable
for k,v in pairs(obj) do
--索引跟值都要做拷贝
newTable[Copy(k)]=Copy(v)
end
--如果有元表要带上
return setmetatable(newTable,getmetatable(obj))
end
return Copy(obj)
end