2014-05-18 3 views
2

테이블이있는 테이블을 만들려고합니다. 내부에 들어가는 테이블은 이전 값에서 약간 변경됩니다. 그러나 최종 결과는 주 테이블 내의 테이블이 서로 동일하고 최신 값과 동일하다는 것입니다.변경 테이블을 다른 테이블에 삽입. 테이블 값이 다를 때 동일해야합니다.

local array = {} 
local x 
local y 

function test(a) 
    if a==1 then 
    x = {1,1} 
    print("x returned") 
    y = x 
    for k,v in pairs(x) do print(k,v) end 
    return x 
    end 

    if a>=1 then 
    p=math.random(1,2) 
    n=math.random(2,4) 
    table.remove(y,p) 
    table.insert(y,p,n) 
    print("") 
    print("y returned") 
    for k,v in pairs(y) do print(k,v) end 
    return y 
    end 

end 


array[1] = test(1) 
array[2] = test(2) 
array[3] = test(3) 

print("") 
for k,v in pairs(array) do print(k,v) end 
testtable=array[1] 
print("") 
for k,v in pairs(testtable) do print(k,v) end 

출력 : array 내부

x returned 
1 1 
2 1 

y returned 
1 1 
2 3 

y returned 
1 1 
2 4 

1 table: 0x678300 
2 table: 0x678300 
3 table: 0x678300 

1 1 
2 4 

세 개의 테이블이 서로 상이 할 것이다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 내가 모르는 테이블에 관한 것이 있습니까?

답변

2

테이블은 개체입니다. 즉, 변수에 테이블 값이 포함되지 않습니다. 대신 테이블에 대한 참조를 보유합니다. 당신이 기능 test에 따라서 :

이제
y = x 

yx 같은 테이블을 모두 참조. 그래서 array 안에있는 세 개의 테이블이 동일합니다.

관련 문제