기타
// 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);
패키지(함수의 묶음)를 등록할 때 사용하는 함수다. 인수의 역할은 다음과 같다.
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));
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 */ }