将变量分配给表

时间:2018-12-11 11:59:45

标签: lua lua-table

我正在尝试将变量分配给表,如下所示:

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”实际上是什么在做。

对不起,如果这是一个基本问题,我们将不胜感激!

1 个答案:

答案 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