我想使用另一个变量作为参考来复制表。
这是表格:
local tableofObjectTables = { }
tableofObjectTables["a"] = "aObjects"
tableofObjectTables["b"] = "bObjects"
tableofObjectTables["c"] = "cObjects"
tableofObjectTables["d"] = "dObjects"
这是我的尝试:
local selectedLetter = "a"
local tabletoCopy1 = tableofObjectTables[selectedLetter]
activeObjects = table.copy(tabletoCopy1)
tabletoCopy是“aObjects”。 ActiveObjects = table.copy(aObjects)
工作正常。
谢谢。
答案 0 :(得分:1)
1)假设您声明了本地 aObjects
,bObjects
以及其他表格:
local tableofObjectTables = { }
-- store reference to objects table rather than string
tableofObjectTables["a"] = aObjects
tableofObjectTables["b"] = bObjects
--more declarations here
现在你尝试应该工作
2)如果aObjects
,bObjects
是全局表,您可以使用_G
变量来访问它们
local tableNameToCopy = tableofObjectTables[selectedLetter]
activeObjects = table.copy(_G[tableNameToCopy])
答案 1 :(得分:0)
浅拷贝
这是一个简单,天真的实现。它只复制顶级值及其直接子级;没有处理更深层的孩子,元表或特殊类型,如userdata或coroutines。它也容易受到__pairs元方法的影响。
function shallowcopy(orig)
local orig_type = type(orig)
local copy
if orig_type == 'table' then
copy = {}
for orig_key, orig_value in pairs(orig) do
copy[orig_key] = orig_value
end
else -- number, string, boolean, etc
copy = orig
end
return copy
end
深层复制
深层复制复制所有级别(或级别的特定子集)。 这是一个简单的递归实现,它还可以处理元数据并避免__pairs元方法。
function deepcopy(orig)
local orig_type = type(orig)
local copy
if orig_type == 'table' then
copy = {}
for orig_key, orig_value in next, orig, nil do
copy[deepcopy(orig_key)] = deepcopy(orig_value)
end
setmetatable(copy, deepcopy(getmetatable(orig)))
else -- number, string, boolean, etc
copy = orig
end
return copy
end
此外,它是递归的,这意味着它可能会溢出大型表的堆栈。