我正在尝试将变量分配给表,如下所示:
b = {x = 3, y = 4}
a = b
-- Reassigning by value?
a.x = 10
print(b.x,b.y)
--OUTPUT: 10 4
但是,我所期望的是根本不应该更改bx,因为我只更改了ax的值,所以似乎我不太理解此示例中的“ a = b”实际上是什么在做。
对不起,如果这是一个基本问题,我们将不胜感激!
答案 0 :(得分:5)
问题是LinkedList
导致它们指向同一张表,如下面的repl-output所示。
a=b
您需要一个深层副本,例如(摘自this gist):
> c = {x = 10, y = 3}
> c
table: 0x564bbdb2d420
> b = c
> b
table: 0x564bbdb2d420
> c
table: 0x564bbdb2d420
像这样function copy3(obj, seen)
-- Handle non-tables and previously-seen tables.
if type(obj) ~= 'table' then return obj end
if seen and seen[obj] then return seen[obj] end
-- New table; mark it as seen an copy recursively.
local s = seen or {}
local res = setmetatable({}, getmetatable(obj))
s[obj] = res
for k, v in pairs(obj) do res[copy3(k, s)] = copy3(v, s) end
return res
end