cocos2dx lua clone实现解析

本文详细介绍了Cocos2d-x中Lua语言实现的对象克隆方法,通过递归复制的方式实现了对复杂数据结构的深拷贝。重点讲解了_clone函数如何处理不同类型的变量,并保持原有的元表设置。

cocos2dx lua clone使用是

local a = clone(b)
clone的源代码

function clone(object)
    local lookup_table = {}                                
    local function _copy(object)
        if type(object) ~= "table" then
            return object
        elseif lookup_table[object] then   --当一个table有两个相同的table就会用到它
            return lookup_table[object]
        end
        local new_table = {}
        lookup_table[object] = new_table
        for key, value in pairs(object) do
            new_table[_copy(key)] = _copy(value)
        end
        return setmetatable(new_table, getmetatable(object))
    end
    return _copy(object)
end
clone的思想总结就是1,遍历 2 ,递归。

通过遍历key ,找到value,递归_copy(value).

如果value类型不是table,则返回object给 new_table[_copy(value)]赋值;

如果类型是table的话,就相当于执行_copy(value),将value看成是一个table,

然后执行

      for key, value in pairs(object) do
            new_table[_copy(key)] = _copy(value)
        end

...

直到value不是table为止。返回一个new_table数组引用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值