在Lua中复制表

时间:2016-08-27 20:47:10

标签: lua reference

我在Lua如何使用对重复表的引用方面遇到问题。如果我有以下代码:

table = {}
table.hello = "Hello"

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

table2 = MyFunction(table)

在此代码中,table2和table最终将具有完全相同的内容。我怎么能这样做只有table2有了goodbye变量?

2 个答案:

答案 0 :(得分:4)

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

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

这个例子,我只提供了一个浅拷贝,所以如果oldTable的字段也是可变表,那么它们只能通过引用复制。有关详细信息,请参阅http://lua-users.org/wiki/CopyTable

答案 1 :(得分:2)

你真的必须复制表格。

如果它是一个数组,那么只包含数字作为键,你可以使用经典循环:

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是您粘贴的