사용자 도구

사이트 도구


kb:luaapimetatable

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

kb:luaapimetatable [2014/11/07 10:02] (현재)
줄 1: 줄 1:
 +====== LuaApi/​MetaTable ======
 +메타 테이블 다루기
 +
 +===== lua_getmetatable =====
 +<code cpp>
 +int lua_getmetatable (lua_State *L, int index);
 +</​code>​
 +해당 인덱스에 있는 아이템의 메타테이블을 가져와 스택에다 푸쉬한다. 정상적으로 동작한 경우에는 0이 아닌 값을 반환한다. 인덱스가 잘못되었거나,​ 아이템에 메타테이블이 없는 경우, 스택에 아무 것도 푸쉬하지 않고, 0을 반환한다.
 +
 +
 +===== lua_setmetatable =====
 +<code cpp>
 +int lua_setmetatable (lua_State *L, int index);
 +</​code>​
 +스택의 맨 위에서 테이블을 팝해, 그 테이블을 지정된 위치에 있는 아이템의 메타테이블로 설정한다. 즉 이 함수를 호출하기 전에 메타테이블로 사용할 테이블을 푸쉬해둬야한다. 무사히 설정한 경우에는 0이 아닌 값을 반환하고,​ 실패한 경우에는 0을 반환한다. 두 경우 모두 스택에 먼저 푸쉬된 메타테이블은 팝된다.
 +<code cpp>
 +// 새로운 테이블을 생성해, ​
 +// __index 메타메서드를 자기 자신으로 설정한다.
 +lua_newtable(L);​
 +lua_pushstring(L,​ "​__index"​);​
 +lua_pushvalue(L,​ -2);
 +lua_settable(L,​ -3);
 +
 +// 위에서 생성한 테이블을 다른 테이블의 메타테이블로 설정한다.
 +lua_setmetatable(L,​ some_where_other_table_exist);​
 +</​code>​
 +
 +----
 +  * see also [[LuaApi]]
  
kb/luaapimetatable.txt · 마지막으로 수정됨: 2014/11/07 10:02 (바깥 편집)