lua的克隆函数,table的深度拷贝

--深度拷贝Table
function DeepCopy(obj)
    local InTable = {};
    local function Func(obj)
        if type(obj) ~= "table" then   --判断表中是否有表
            return obj;
        end
        local NewTable = {};  --定义一个新表
        InTable[obj] = NewTable;  --若表中有表,则先把表给InTable,再用NewTable去接收内嵌的表
        for k,v in pairs(obj) do  --把旧表的key和Value赋给新表
            NewTable[Func(k)] = Func(v);
        end
        return setmetatable(NewTable, getmetatable(obj))--赋值元表
    end
    return Func(obj) --若表中有表,则把内嵌的表也复制了
end

 

注意如果里面有字段是指向自己的,需要单独拿出,不然会死循环

 

posted @ 2019-04-10 15:54  三页菌  阅读(768)  评论(0编辑  收藏  举报