gpt4 book ai didi

lua - 为表分配变量

转载 作者:行者123 更新时间:2023-12-02 00:26:06 24 4
gpt4 key购买 nike

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

b = {x = 3, y = 4}

a = b
-- Reassigning by value?
a.x = 10
print(b.x,b.y)
--OUTPUT: 10 4

然而,我期望的是 b.x 根本不应该改变,因为我只改变了 a.x 的值,所以我似乎不太明白这个例子中的“a=b”实际上是什么正在做。

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

最佳答案

问题是 a=b 导致它们指向同一个表,如下面的 repl 输出所示。

> c = {x = 10, y = 3}
> c
table: 0x564bbdb2d420
> b = c
> b
table: 0x564bbdb2d420
> c
table: 0x564bbdb2d420

你需要一个深拷贝,比如这个(取自 this gist ):

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

像这样使用 a = copy3(b)

关于lua - 为表分配变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53723764/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com