2012-05-22 2 views
1

저는 Lua 5.2 C API를 사용하고 있습니다. 문자열 변수 또는 문자열 리터럴을 받아들이는 함수를 얻으려고합니다. Lua API는 값 대신 변수 이름을 평가합니다.

이 코드 : 루아에서 실행할 때

static int printTest(lua_State *L) 
{ 
    size_t lslen = NULL; 
    const char *lsrc = lua_tolstring(L, 0, &lslen); 
    printf("%s\n", lsrc); 
} 
/* ----- Registration array ----- */ 
static const luaL_Reg testhook[] = { 
     {"printTest", printTest}, 
     {NULL, NULL} /* sentinel */ 
};  
/* ----- Registration function ----- */  
LUALIB_API int registerTestHookFunctions(lua_State *L) 
{ 
    lua_newtable(L); 
    lua_setglobal(L, "hook"); 
    lua_getglobal(L, "hook"); 
    luaL_setfuncs(L, testhook, 0); 
    lua_settop(L, 0); 
    return 0; 
} 

,이 작업을 수행합니다

hook.printTest('hello') -- prints 'hello' 
a = 'hello' 
hook.printTest(a) -- prints 'a' 

나는 루아 아주 새로운 해요 및이 문서 사용 : http://www.lua.org/manual/5.2/manual.html 및 발견하고 있지 않다/이해 리터럴로부터 변수를 식별하는 방법. (예를 들어, lua_isliteral() 또는 lua_isvariable() 메소드는 없습니다).

+0

'printTest'는 0을 반환해야합니다. – lhf

답변

5

잘못된 색인을 lua_tolstring으로 전달했습니다. 참조 설명서에 명확하게 명시된 내용은

입니다.

상대 값에는 음수 인덱스를 사용하고 절대 값에는 양수 인덱스를 사용합니다. 이 조건들 중 어느 것도 0이 아닙니다.

+0

한숨. 당황스럽게 지금 나는 그것을 보았다. 감사. – Paul

관련 문제