Lua Tables: 如何分配值而非地址?

以下是我的代码:

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

actual.nest.a=10
test_tab1=actual.nest
print("test_tab1.a:" .. test_tab1.a) -- 打印 test_tab1.a 等于 10

actual.nest.a=20
test_tab2=actual.nest
print("test_tab2.a:" .. test_tab2.a) -- 打印 test_tab2.a 等于 20
print("test_tab1.a:" .. test_tab1.a) -- 打印 test_tab1.a 等于 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**的值也会从之前的10变成20。

期望输出:

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

是否有人可以帮我获得这种输出?如果我第二次更改actual.nest.a=20,它不应该反映在test_tab1.a,即10中。

点赞
用户1190388
用户1190388

你需要复制/克隆source中的表格到destination。将t1=t2只是将t1的地址分配给了t2

这是一个你可以使用的浅层复制方法

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 -- 数字、字符串、布尔值、等等
        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) -- 输出test_tab1.a等于10

actual.nest.a = 20
test_tab2 = shallowcopy(actual.nest)
print("test_tab2.a:" .. test_tab2.a) -- 输出test_tab2.a等于20
print("test_tab1.a:" .. test_tab1.a) -- 输出test_tab1.a等于20
2016-09-19 07:42:55