Lua中的表复制

我在Lua中使用引用复制表遇到了麻烦。如果我有以下代码:

table = {}
table.hello = "Hello"

function MyFunction (myTable)
        myTable.goodbye = "goodbye"
        return myTable
end

table2 = MyFunction(table)

在此代码中,table2和table将具有完全相同的内容。我该怎么做才能使只有table2具有goodbye变量?

点赞
用户90511
用户90511

你需要创建一个新表,并将旧表中的所有字段复制到新表中:

function MyFunction (oldTable)
    local newTable = {}
    for k,v in pairs(oldTable) do
        newTable[k] = v
    end
    newTable.goodbye = "goodbye"
    return newTable
end

我给出的示例只进行了浅拷贝,因此,如果旧表具有也是可变表的字段,则它们只会通过引用复制。要获取更多信息,请参见http://lua-users.org/wiki/CopyTable

2016-08-27 21:12:43
用户2320153
用户2320153

你需要直接复制表格。

如果这是一个只包含数字键的数组,你可以使用经典的循环:

for i=1, #table do
    table2[i] = table[i]
end

但如果你使用文本引用,就像你的 table.goodbye 示例一样,你需要按键值对迭代:

for k,v in pairs(table) do
    table2[k] = v
end

在这两个循环中,table 意味着你想要复制的表格,而 table2 是你想要粘贴到的表格。

2016-08-27 21:45:12