2016-09-19 4 views
3

Вот мой код:Lua Tables: как присвоить значение не адрес?

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_tab1 и test_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

+0

Выход правильно, что все в порядке. Но как можно получить второй выход? test_tab1.a: 10 test_tab2.a: 20 test_tab1.a: 10 – StackUser

+0

Вам необходимо создать разделяемую таблицу. Вы можете сделать это при назначении 'test_tab1' или при назначении' test_tab2' и изменить значение в этой копии. Это действительно зависит от вашего варианта использования. – moteus

ответ

3

Вы должны сделать копию?/клон таблиц от source до destination. Выполнение t1 = t2 просто присваивает t1 адрес t2 - t1.

Вот копия shallow copy method вы можете использовать:

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 

 Смежные вопросы

  • Нет связанных вопросов^_^