Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory Lua表:如何分配值而不是地址?_Memory_Lua_Lua Table_Luajit - Fatal编程技术网

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

Memory Lua表:如何分配值而不是地址?,memory,lua,lua-table,luajit,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) -

这是我的密码:

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\u tab1
test\u tab2
都指向同一个地址,即actual.nest,所以当我分配
actual.nest.a=20
test\u tab1.a
的值时,
test\u tab1.a也变为20,之前的值为10

预期产出:

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

有人能帮我得到这个输出吗?。如果我第二次更改
actual.nest.a=20
,它不应该反映在
test\u tab1.a
即10

中,您必须将表从
复制/克隆到
目标
。执行
t1=t2
只需将
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


输出正确输出正确无误。但是我怎样才能得到第二次输出呢?测试表1.a:10测试表2.a:20测试表1.a:10您需要创建separeate表。您可以在分配给
测试选项卡1
或分配
测试选项卡2
并更改此副本中的值时执行此操作。这实际上取决于您的用例。
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