Lua表格:如何赋值而不是地址?

3

这是我的代码:

test_tab1={}
test_tab2={}
actual={}
actual.nest={}

actual.nest.a=10
test_tab1=actual.nest 
print("test_tab1.a:" .. test_tab1.a) -- prints test_tab1.a equal to 10

actual.nest.a=20
test_tab2=actual.nest 
print("test_tab2.a:" .. test_tab2.a) -- prints test_tab2.a equal to 20
print("test_tab1.a:" .. test_tab1.a) -- prints test_tab1.a equal to 20

实际输出:

test_tab1.a:10
test_tab2.a:20
test_tab1.a:20

根据我的理解,test_tab1test_tab2都指向同一个地址,即actual.nest。因此,当我赋值actual.nest.a=20时,test_tab1.a的值也会改变为20,而以前它是10。
期望输出:
test_tab1.a:10
test_tab2.a:20
test_tab1.a:10

有谁能帮我得到这个输出? 如果我第二次改变actual.nest.a=20,它不应该反映在 test_tab1.a 上,即10


1
输出是正确的。 - moteus
输出是正确的,这很好。但我怎么可以获得第二个输出呢? test_tab1.a:10 test_tab2.a:20 test_tab1.a:10 - StackUser
你需要创建一个单独的表。当分配给 test_tab1 或者分配给 test_tab2 并更改此副本中的值时,可以这样做。这实际上取决于你的用例。 - moteus
1个回答

3

您需要将表格从 source 复制/克隆到 destination 中。使用 t1 = t2 只会将地址赋给了 t1 ,而不是复制整个表格。

以下是可供使用的浅拷贝方法,取自此处:

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

actual={}
actual.nest={}

actual.nest.a=10
test_tab1 = shallowcopy(actual.nest)
print("test_tab1.a:" .. test_tab1.a) -- prints test_tab1.a equal to 10

actual.nest.a = 20
test_tab2 = shallowcopy(actual.nest)
print("test_tab2.a:" .. test_tab2.a) -- prints test_tab2.a equal to 20
print("test_tab1.a:" .. test_tab1.a) -- prints test_tab1.a equal to 20

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接