lua深拷贝

有时候在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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值