사용자 도구

사이트 도구


kb:luaauxapimisc

차이

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

차이 보기로 링크

kb:luaauxapimisc [2014/11/07 10:00] (현재)
줄 1: 줄 1:
 +====== LuaAuxApi/​Misc ======
 +기타
 +
 +===== luaL_openlib =====
 +<code cpp>
 +// lauxlib.h 파일에 정의
 +typedef struct luaL_reg {
 +  const char *name;
 +  lua_CFunction func;
 +} luaL_reg;
 +
 +void luaL_openlib (lua_State *L, const char *libname, const luaL_reg *l, int nup);
 +</​code>​
 +패키지(함수의 묶음)를 등록할 때 사용하는 함수다. 인수의 역할은 다음과 같다.
 +  * L : 루아 스테이트 객체
 +  * libname : 패키지의 이름
 +  * l : 등록할 함수들의 이름, 포인터 배열. 배열의 마지막 항목은 {NULL,​NULL}의 형태이어야 한다.
 +  * nup : 각각의 함수가 가질 upvalue의 갯수
 +
 +libname 문자열이 NULL이 아닌 경우에는 해당하는 이름의 전역 테이블이 생성되고(이미 같은 이름의 테이블이 존재한다면 그것을 이용한다),​ 그 테이블 안에 모든 함수들이 등록된다. libname 문자열이 NULL일 경우에는,​ 테이블을 생성하는 것이 아니라, 스택의 맨 위에, 함수들을 집어넣을 테이블이 있는 것으로 간주한다. ​
 +
 +사용법 예제를 보자.
 +<code cpp>
 +static const struct luaL_reg arraylib[] = 
 +{
 +    {"​new",​ newarray},
 +    {"​set",​ setarray},
 +    {"​get",​ getarray},
 +    {"​size",​ getsize},
 +    {NULL, NULL}
 +};
 +
 +lua_openlib(L,​ "​array",​ arraylib, 0);
 +</​code>​
 +<code lua>
 +a = array.new()
 +print(a);
 +print(array.size(a));​
 +for i=1,1000 do
 +    array.set(a,​ i, 1/i);
 +end
 +print(array.get(a,​ 10));
 +</​code>​
 +
 +
 +===== luaL_findstring =====
 +<code cpp>
 +int luaL_findstring (const char *st, const char *const lst[]);
 +</​code>​
 +문자열의 배열 lst에서 특정 문자열 st를 찾아서, 배열 인덱스를 반환하는 함수다. lst 문자열 배열은 NULL 문자열로 끝나야 한다. 문자열을 찾을 수 없었다면 -1을 반환한다. 그냥 함수 자체를 보는 것이 차라리 이해가 빠를 듯.
 +<code cpp>
 +int luaL_findstring (const char *name, const char *const list[]) ​
 +{
 +    int i;
 +    for (i=0; list[i]; i++)
 +        if (strcmp(list[i],​ name) == 0)
 +            return i;
 +    return -1;  /* name not found */
 +}
 +</​code>​
 +
 +----
 +  * see also [[LuaAuxApi]]
  
kb/luaauxapimisc.txt · 마지막으로 수정됨: 2014/11/07 10:00 (바깥 편집)