사용자 도구

사이트 도구


kb:luaauxapistack

차이

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

차이 보기로 링크

kb:luaauxapistack [2014/11/07 10:00] (현재)
줄 1: 줄 1:
 +====== LuaAuxApi/​Stack ======
 +스택 및 인수 다루기
 +
 +===== luaL_checklstring =====
 +<code cpp>
 +const char *luaL_checklstring (lua_State *L, int numArg, size_t *l);
 +
 +#define luaL_checkstring(L,​n) (luaL_checklstring(L,​ (n), NULL))
 +</​code>​
 +스택에 문자열이 있는지 검사할 때 사용하는 함수다. 지정된 인덱스에 문자열이 있는 경우 그 문자열을 반환하고,​ 없는 경우 스택에다 에러 메시지를 푸쉬하고,​ 에러를 발생시킨다.
 +
 +  * L : 루아 스테이트
 +  * numArg : 스택 인덱스
 +  * l : 해당하는 위치에 있는 아이템이 문자열일 경우, 이 인수가 NULL이 아니면 문자열의 길이가 들어간다.
 +
 +문자열의 길이에 별로 관심이 없다면, luaL_checkstring 함수를 이용하라.
 +
 +
 +===== luaL_optlstring =====
 +<code cpp>
 +const char *luaL_optlstring (lua_State *L, int numArg, const char *def, size_t *l);
 +
 +#define luaL_optstring(L,​n,​d) (luaL_optlstring(L,​ (n), (d), NULL))
 +</​code>​
 +스택에 문자열이 있는지 검사할 때 사용하는 함수다. 지정된 인덱스에 문자열이 있는 경우, 그 문자열을 반환하고,​ 없는 경우 def 문자열을 대신 반환한다.
 +
 +  * L : 루아 스테이트
 +  * numArg : 스택 인덱스
 +  * def : 해당하는 위치의 스택에 문자열이 없는 경우, 반환할 문자열
 +  * l : 해당하는 위치에 있는 문자열의 길이가 들어갈 변수
 +
 +문자열의 길이에 별로 관심이 없다면, luaL_optstring 함수를 이용하라.
 +
 +
 +===== luaL_checknumber and luaL_optnumber =====
 +<code cpp>
 +lua_Number luaL_checknumber (lua_State *L, int numArg);
 +lua_Number luaL_optnumber (lua_State *L, int nArg, lua_Number def);
 +
 +#define luaL_checkint(L,​n) ​ ((int)luaL_checknumber(L,​ n))
 +#define luaL_checklong(L,​n) ((long)luaL_checknumber(L,​ n))
 +#define luaL_optint(L,​n,​d) ​ ((int)luaL_optnumber(L,​ n,​(lua_Number)(d)))
 +#define luaL_optlong(L,​n,​d) ((long)luaL_optnumber(L,​ n,​(lua_Number)(d)))
 +</​code>​
 +luaL_checkstring 함수와 luaL_optlstring 함수의 숫자 버전이라고 생각하면 된다. luaL_checkint,​ luaL_optint,​ luaL_checklong,​ luaL_optlong 함수도 마찬가지다.
 +
 +
 +===== luaL_checkany =====
 +<code cpp>
 +void luaL_checkany (lua_State *L, int narg);
 +</​code>​
 +narg 인덱스의 아이템이 존재하는지 조사한다. 존재하지 않는 경우, 스택에다 에러 메시지를 푸시하고,​ 에러를 발생시킨다.
 +
 +
 +===== luaL_checktype =====
 +<code cpp>
 +void luaL_checktype (lua_State *L, int narg, int t);
 +</​code>​
 +narg 인덱스의 아이템이 타입 t 와 같은 타입인지 조사한다. 다른 타입일 경우 스택에다 에러 메시지를 푸시하고,​ 에러를 발생시킨다.
 +
 +
 +===== luaL_checkstack =====
 +<code cpp>
 +void luaL_checkstack (lua_State *L, int sz, const char *msg);
 +</​code>​
 +주어진 sz 만큼 스택의 크기를 늘린다. 스택 크기를 늘리는 데 실패한 경우에는 에러 메시지를 푸시하고,​ 에러를 발생시킨다.
 +
 +
 +===== luaL_typerror =====
 +<code cpp>
 +int luaL_typerror (lua_State *L, int narg, const char *tname);
 +</​code>​
 +numarg 인덱스에 있는 아이템에 대한<​code>"​%s expected, got %s"</​code>​ 형식의 에러 메시지를 스택에다 푸쉬한다. 실제 함수 내용은...
 +<code cpp>
 +int luaL_typerror (lua_State *L, int narg, const char *tname) ​
 +{
 +    const char *msg = lua_pushfstring(L,​ "%s expected, got %s",
 +                                      tname, lua_typename(L,​ lua_type(L,​narg)));​
 +    return luaL_argerror(L,​ narg, msg);
 +}
 +</​code>​
 +딱히 뭔가 용도가 있다기 보다는 다른 함수들에서 에러 보고용으로 쓰이는 함수다.
 +
 +
 +===== luaL_argerror =====
 +<code cpp>
 +int luaL_argerror (lua_State *L, int numarg, const char *extramsg);
 +</​code>​
 +numarg 인덱스에 있는 아이템에 대한 에러 메시지를 푸시하고,​ 에러를 발생시킨다. extramsg 문자열이 NULL이 아닌 경우, 에러 문자열에 추가된다. 딱히 뭔가 용도가 있다기 보다는 다른 함수들에서 에러 보고용으로 쓰이는 함수다. (함수 호출시 잘못된 인수를 전달한 경우, 에러를 출력하기 위해서 사용되는 함수)
 +
 +
 +===== luaL_argcheck =====
 +<code cpp>
 +#define luaL_argcheck(L,​ cond, numarg, extramsg) if (!(cond)) \
 +                         ​luaL_argerror(L,​ numarg,​extramsg)
 +</​code>​
 +보다시피 주어진 cond 조건이 false인 경우, luaL_argerror(L,​ numarg, extramsg) 함수를 호출한다.
 +
 +----
 +  * see also [[LuaAuxApi]]
  
kb/luaauxapistack.txt · 마지막으로 수정됨: 2014/11/07 10:00 (바깥 편집)