美文网首页
lua之 = 号容易踩的坑

lua之 = 号容易踩的坑

作者: GCKJianshu | 来源:发表于2017-04-27 20:36 被阅读0次

在做一个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)

相关文章

网友评论

      本文标题:lua之 = 号容易踩的坑

      本文链接:https://www.haomeiwen.com/subject/aypnzttx.html