사용자 도구

사이트 도구


kb:luaauxapimisc

LuaAuxApi/Misc

기타

luaL_openlib

// 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);

패키지(함수의 묶음)를 등록할 때 사용하는 함수다. 인수의 역할은 다음과 같다.

  • L : 루아 스테이트 객체
  • libname : 패키지의 이름
  • l : 등록할 함수들의 이름, 포인터 배열. 배열의 마지막 항목은 {NULL,NULL}의 형태이어야 한다.
  • nup : 각각의 함수가 가질 upvalue의 갯수

libname 문자열이 NULL이 아닌 경우에는 해당하는 이름의 전역 테이블이 생성되고(이미 같은 이름의 테이블이 존재한다면 그것을 이용한다), 그 테이블 안에 모든 함수들이 등록된다. libname 문자열이 NULL일 경우에는, 테이블을 생성하는 것이 아니라, 스택의 맨 위에, 함수들을 집어넣을 테이블이 있는 것으로 간주한다.

사용법 예제를 보자.

static const struct luaL_reg arraylib[] = 
{
    {"new", newarray},
    {"set", setarray},
    {"get", getarray},
    {"size", getsize},
    {NULL, NULL}
};
 
lua_openlib(L, "array", arraylib, 0);
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));

luaL_findstring

int luaL_findstring (const char *st, const char *const lst[]);

문자열의 배열 lst에서 특정 문자열 st를 찾아서, 배열 인덱스를 반환하는 함수다. lst 문자열 배열은 NULL 문자열로 끝나야 한다. 문자열을 찾을 수 없었다면 -1을 반환한다. 그냥 함수 자체를 보는 것이 차라리 이해가 빠를 듯.

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 */
}

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