2012-05-22 53 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; 
} 

從Lua中運行時,會做到這一點:

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

我很新的Lua和使用該文檔:http://www.lua.org/manual/5.2/manual.html 和我沒有找到/理解如何辨別文字中的變量。 (例如,沒有lua_isliteral()或lua_isvariable()方法)。

+0

'printTest'應該返回0. – lhf

回答

5

您已通過一個不良索引lua_tolstring。參考手冊明確指出:

0從來不是一個可接受的索引。

您使用相對值的負指數和絕對值的正指數。這兩個條件都不是0.

+0

感嘆。現在令我尷尬的是,我明白了。謝謝。 – Paul