Lua表:如何分配值而不是地址?

时间:2016-09-19 07:00:30

标签: memory lua lua-table luajit

这是我的代码:

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,所以当我指定的{strong> 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 个答案:

答案 0 :(得分:3)

您必须从sourcedestination复制/复制表格。执行t1 = t2只需将t1的{​​{1}}地址分配给t2

以下是您可以使用的shallow copy method副本:

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