이전 테이블1에서는 테이블을 간단히 배열로써 사용해봤습니다만, 사실 루아의 테이블은 이렇게 단순한 용도가 아니라 좀 더 다양한 작업을 할 수 있습니다. 엄밀히 말하면 테이블은 배열과는 개념이 다릅니다.
- 테이블은 배열처럼 인수를 항상 연속된 저장 공간에 채워넣는게 아니라, 단순히 해당 인덱스에 값을 저장할 뿐입니다. 따라서, 굳이 인덱스를 1부터 채워갈 필요는 없습니다.
function main()
local MyTable = {};
MyTable[ 11] = "Hello";
MyTable[ 23] = "World";
end
- 테이블은 C언어와는 달리 정수 외에도 문자열을 인덱스로써 사용할 수 있습니다. C언어에 익숙한 사용자라면 이해가 안가겠지만 다음 예제를 보면서 구조를 이해하시기 바랍니다.
function main()
local MyTable = {};
MyTable[ 11] = "Hello";
MyTable[ 23] = "World";
MyTable[ "year"] = 2010;
MyTable[ "month"] = 4;
MyTable[ "day"] = 5;
MyTable[ "week"] = "Monday";
for index, data = in pairs( MyTable) do
print( "index = " .. index .. ", data = " .. data);
end
end
위 코드를 실행하면 다음 결과가 출력됩니다.
index = 11, data = Hello
index = 23, data = World
index = year, data = 2010
index = month, data = 4
index = day, data = 5
index = week, data = Monday
- 테이블은 일반 상수값 외에도 변수나 함수를 직접 요소로써 가질 수 있습니다. 이 역시 C언어에 익숙한 사용자라면 더더욱 이해가 안가겠지만, 위의 예제와 동일한 결과를 출력하는 다음 예제를 보면서 구조를 이해하시기 바랍니다.
MyTable = {};
MyTable[ 11] = "Hello";
MyTable[ 23] = "World";
MyTable[ "year"] = 2010;
MyTable[ "month"] = 4;
MyTable[ "day"] = 5;
MyTable[ "week"] = "Monday";
-- Add variables
MyTable.strName = "";
MyTable.nAge = 0;
-- Add function
function MyTable:PrintData()
for index, data = in pairs( MyTable) do
print( "index = " .. index .. ", data = " .. data);
end
end
function main()
MyTable.strName = "John";
MyTable.nAge = 32;
MyTable:PrintData();
end
테이블에 속한 변수를 호출할땐 테이블 인스턴스명 뒤에 .을 찍고, 함수를 호출할땐 :를 사용한다는 점을 유의하시기 바랍니다.
댓글 없음:
댓글 쓰기