在Lua中复制表
我在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中只有“再见”变量?您需要创建一个新表,并将旧表中的所有字段
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上,而不是迭代非整数键。另一方面,第二条评论对我来说也是新的,谢谢你的启发!