반응형

루아 테이블에서의 저장 영역은 키-값 (key-value)의 쌍으로 이루어 집니다.

루아는 일반적인 배열(array) 과 dictionary 간의 차이점을 갖지 않습니다.

즉 배열과 dictionary 간의 차이를 루아 테이블에서는 볼수 없다는 것이죠.

 

모든 루아의 테이블들은 실질적으로는 dictionary 와 같이 동작 합니다. 일반적으로 배열에서의 키는 정수이어야 한다는것과도

다르죠.

 

> t = { 3,6,9 }                 -- is the same as...

> t = { [1]=3, [2]=6, [3]=9 } -- is the same as...
> t = {} t[1]=3 t[2]=6 t[3]=9

이러한 의미에서 위의 3줄은 모두 같은 내용 입니다.

 

테이블의 키는 일종의 레퍼런스(reference) 입니다.

a = { [{1,2,3}]="yadda" }              -- construct a table where the element has a table key
for k,v in pairs(a) do print(k,v) end  -- display the table contents: key-value pairs
print( a[{1,2,3}])                           -- display the element value

 

위와 같은 예제서 결과는

table: 014D9150 yadda
nil

입니다.

k,v in pairs(a) 에서

k 는 테이블 a에 있는 키, v 는 해당 키로 지정된 값 입니다.

또한 a 의 키는 {1,2,3} 이라는 테이블입니다. [] 를 쒸운것은 이 테이블 자체의 주소를 키로 사용한다는 것이죠.

그러므로 k 는 table 이라는 값이 나오는 것이고 그 주소가 나오는 것 입니다.

역시 v 는 해당 키에 대한 값 "yadda" 이죠.

 

위의 값을 다음과 같이 풀어보죠.

tablekey = {1,2,3}                     -- create a table with a variable referencing it
a = { [tablekey]="yadda" }             -- construct a table using the table as a key
for k,v in pairs(a) do print(k,v) end  -- display the table elements
print(a[tablekey])                          -- retrieve a value from the table
print(tablekey)              -- the table value is the same as the key above

 

결과는

table: 014D89D0 yadda
yadda
table: 014D89D0

 

위와 같이 보시면 이해가 좀 쉬우실 겁니다.

 

+ Recent posts