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
相關文章
相關標籤/搜索