【发布时间】:2019-08-30 23:48:15
【问题描述】:
为什么我们不能像这样在 Lua 中直观地复制表格:
a = {
a = {},
b = {},
}
b = {}
b = a.b
我在这样做时遇到了一些奇怪的错误。如果我使用如下表克隆函数,它会正常工作,我只是不明白为什么必须首先使用克隆函数/最佳实践。
很难描述我在尝试执行第一种方法时遇到的错误,但基本上,如果我尝试在b = a.b 的a.b 部分中添加额外的键值,那么额外的键-价值观并不总是我设定的那样。
function deepCopy(object)
local lookup_table = {}
local function _copy(object)
if type(object) ~= "table" then
return object
elseif lookup_table[object] then
return lookup_table[object]
end
local new_table = {}
lookup_table[object] = new_table
for index, value in pairs(object) do
new_table[_copy(index)] = _copy(value)
end
return setmetatable(new_table, getmetatable(object))
end
return _copy(object)
end
然后执行以下操作会删除所有错误
b = deepCopy(a.b)
【问题讨论】:
-
你能举一个错误的例子吗?可能尝试使用您的
b = a.b示例复制该行为 -
存储在变量中的表(作为 Lua 值)只是对实际表的引用。复制变量只会创建对同一个表的另一个引用。要构建表的副本,您必须手动完成。
标签: lua