2017-12-19 2 views
1

나는이 내 코드는 ... 루아 메타 테이블에 대한 몇 가지 질문이 있습니다 :루아 메타 테이블 변수

setmetatable(t1, mb) 
setmetatable(t2, mb) 
print("t1:", getmetatable(t1)) 
print("t2:", getmetatable(t2)) 
mb.__index = mb 

print(t1.a) 
t1.a = 2 
print(t2.a) 
mb.a = 3 
print(t1.a) 
print(t2.a) 

이 출력됩니다 :

t1:  table: 00D62D88 
t2:  table: 00D62D88 
1 
1 
2 
3 

출력은 나에게 그 T1을 보여주고 T2는 같은있다 metatable mb (같은 주소), 나는 t1.a 및 t2.a mb.a, 그들은 같은 변수라고 생각합니다. 하지만 t1.a에 새로운 값을 주면 t2.a는 변경되지 않습니다. mb.a에 새로운 값을 주면 t3가 변경됩니다! 다른 사람이 어떻게되는지 설명 할 수 있습니까?

답변

1

이것이 바로 __index의 작동 방식입니다.

t 다음 t.as.a로 확인 읽기, 테이블 s_index 항목을 가리키는 메타 테이블 m이있는 경우, t.a 전무하다.

+0

예, 이해했습니다. 감사! – ChangHao