lua之 = 号容易踩的坑

在做一个cocos2dx的项目的时候,有大概这么一段代码

self.table1 = {1,2, 3}
self.table2 = self.table
table.remove(self.table2, 3)

大概的意思就是这样,当我第二次回来用到这个table1的时候,我发现第三个数不见了,一脸懵逼,通过多次试验和打印外加高人指点,这就是lua引用容易踩的坑。
简单点说,就是table2是引用的table1,而不是新开辟了一个内存空间,table2就是指向的table1的内存地址,如果删除table2中的元素,那么就是删除掉了内存地址中的元素,也就是table1中的元素被删除了。
下面是一个深拷贝的方法,可以完全开辟一块新的内存空间,来避免因为删除了table2而误删table1中的元素

function copyTable(originTable)
    if (originTable == nil or type(originTable) ~= "table") then
        return originTable
    end
    local Ret = {}
    for k,v in pairs(originTable) do
        local vtype = type(v)
        if (vtype == "table") then
            Ret[k] = self:copyTable(v)
        else
            Ret[k] = v
        end
    end     
    return Ret
end

在使用的时候,直接调用赋值就是一个深拷贝了

self.table2 = copyTable(self.table1)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容