사용자 도구

사이트 도구


kb:luaapimetatable

LuaApi/MetaTable

메타 테이블 다루기

lua_getmetatable

int lua_getmetatable (lua_State *L, int index);

해당 인덱스에 있는 아이템의 메타테이블을 가져와 스택에다 푸쉬한다. 정상적으로 동작한 경우에는 0이 아닌 값을 반환한다. 인덱스가 잘못되었거나, 아이템에 메타테이블이 없는 경우, 스택에 아무 것도 푸쉬하지 않고, 0을 반환한다.

lua_setmetatable

int lua_setmetatable (lua_State *L, int index);

스택의 맨 위에서 테이블을 팝해, 그 테이블을 지정된 위치에 있는 아이템의 메타테이블로 설정한다. 즉 이 함수를 호출하기 전에 메타테이블로 사용할 테이블을 푸쉬해둬야한다. 무사히 설정한 경우에는 0이 아닌 값을 반환하고, 실패한 경우에는 0을 반환한다. 두 경우 모두 스택에 먼저 푸쉬된 메타테이블은 팝된다.

// 새로운 테이블을 생성해, 
// __index 메타메서드를 자기 자신으로 설정한다.
lua_newtable(L);
lua_pushstring(L, "__index");
lua_pushvalue(L, -2);
lua_settable(L, -3);
 
// 위에서 생성한 테이블을 다른 테이블의 메타테이블로 설정한다.
lua_setmetatable(L, some_where_other_table_exist);

kb/luaapimetatable.txt · 마지막으로 수정됨: 2014/11/07 10:02 (바깥 편집)