在Lua中复制表

在Lua中复制表,lua,reference,Lua,Reference,我在Lua如何使用引用复制表方面遇到了问题。如果我有以下代码: table = {} table.hello = "Hello" function MyFunction (myTable) myTable.goodbye = "goodbye" return myTable end table2 = MyFunction(table) 在这段代码中,表2和表最终将具有完全相同的内容。我怎样才能使表2中只有“再见”变量?您需要创建一个新表,并将旧表中的所有字段

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

table = {}
table.hello = "Hello"

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

table2 = MyFunction(table)

在这段代码中,表2和表最终将具有完全相同的内容。我怎样才能使表2中只有“再见”变量?

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

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

我给出的示例只进行浅层复制,因此,如果oldTable中的字段也是可变表,那么它们只能通过引用进行复制。有关更多信息,请参见

您必须复制表格

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

for i=1, #table do
    table2[i] = table[i]
end
但是,如果使用文本引用,如您的示例中的
table.bye
,则需要按键值对进行迭代:

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

在这两个循环中,
table
表示要从中复制的表,而
table2
是要粘贴到的表。

“Lua使用引用复制表”:据我所知,Lua变量引用值,赋值、返回或参数复制引用,不是值。注意:对迭代每个键,而不仅仅是字符串类型的键。还要注意:
对于i=1,#table do
迭代从1到表的“长度”的正整数,只有当;也许不是,因为对我来说,数组只是指具有任何值的整数键的有界范围,但序列不能包含nil值)。@TomBlodget我无意暗示;相反,我试图将重点放在简单的for上,而不是迭代非整数键。另一方面,第二条评论对我来说也是新的,谢谢你的启发!