lua_State* L;
void main()
{
L = lua_open();
{
L = lua_open();
luaopen_base(L);
luaopen_io(L);
luaopen_math(L);
luaopen_string(L);
luaopen_table(L); // 여기까지 했더니, 스택의 top이 7이 되는 군요!
luaopen_io(L);
luaopen_math(L);
luaopen_string(L);
luaopen_table(L); // 여기까지 했더니, 스택의 top이 7이 되는 군요!
// 빈 테이블을 만들어 스택에 push합니다. 테이블이 있는 위치는 8이 되겠군요.
lua_newtable(L);
// 테이블에 값을 넣어봅시다. - settable 함수를 써야 합니다.
// settable을 호출하기 전에 키와 값을 넣어줘야 합니다. (순서유의! 키넣고, 값넣음!)
lua_pushstring(L,"a"); // 키를 스택에 넣음 lua_pushnumber(L,33); // 값을 스택에 넣음 lua_settable(L,8); // 스택에 키와 값이 들어감.
// 여기까지를 스택의 상태로 살펴보면
| | 10 | 33 | 10 <- | | 10
| | 9 | a | 9 | | 9
| 테이블 | 8 <- | 테이블 | 8 | 테이블 | 8 <-
| | 7 | | 7 | | 7
newtable후, push 후, settable후,
이제 테이블에 키 = 값의 쌍이 저장.
// 테이블에서 값을 가져와봅시다. - gettable 함수를 써야합니다.
// gettable함수를 호출하기 전에 키를 넣어줘야합니다.
lua_pushstring(L,"a"); // 키를 스택에 넣음
lua_gettable(L,8); // 테이블에서 가져옵니다. 8은 테이블이 스택에서의 인덱스.
// 테이블에서 가져온 값은 스택의 top으로 들어옵니다.
int num = lua_tonumber(L,-1); // num으로 33이 들어옵니다.
// 여기까지를 스택의 상태로 살펴보면
| | 10 | | 10 | | 10
| | 9 | a | 9 <- | 33 | 9 <-
| 테이블 | 8 <- | 테이블 | 8 | 테이블 | 8
| | 7 | | 7 | | 7
------------------------------------------------------------------------------
이외의 테이블에 값 넣는 함수
* 만일, 키와 값이 int 형이라면 rawseti, rawgeti 를 이용
(테이블을 배열로 사용하는 경우에 주로 사용하는 함수)
lua_pushnumber(L, 값);
lua_rawseti(L, 테이블위치, 키);
ex) lua_pushnumber(L, 33);
lua_rawseti(L, 8, 1); // 1 - 33 쌍으로 테이블에 저장됨
테이블에서 값을 얻는 함수
lua_rawgeti(L, 테이블위치, 키);
ex) lua_rawgeti(L, 8, 1); // top에 값(33)이 push됨 (gettable과 비슷)
------------------------------------------------------------------------------
테이블 횡단하기
int lua_next (lua_State *L, int index);
ex)
lua_pushnil(L); // lua_next 에게 키를 주기 위해. 일단 nil을 줌.
lua_pushnil(L); // lua_next 에게 키를 주기 위해. 일단 nil을 줌.
while (lua_next(L, t) != 0) // 더이상 횡단할 쌍이 없으면 0리턴
{
lua_pop(L, 1);
{
lua_pop(L, 1);
}
// lua_next를 호출하기 전에 반드시 키가 스택에 들어가 있어야한다.
// lua_next는 key를 빼가고(pop하고), t에 있는 key와 value를 스택에 넣어준다(push)
// pop을 해주는 것은, next호출 후에 스택에 key와 value값이 들어있는데, 루프를 돌기위해 필요한 key만 놔두고 value를 제거하는 것이다.
// pop을 해주는 것은, next호출 후에 스택에 key와 value값이 들어있는데, 루프를 돌기위해 필요한 key만 놔두고 value를 제거하는 것이다.
// 그림으로 살펴보자.
| | 10 | | 10 | 33(값) | 10 <- | | 10
| | 9 | nil | 9 <- | 1(키) | 9 | 1(키) | 9
| 테이블 | 8 <- | 테이블 | 8 | 테이블 | 8 | 테이블 | 8
| | 7 | | 7 | | 7 | | 7
초기상태 pushnil lua_nex후, pop후,
댓글 없음:
댓글 쓰기