【问题标题】:Lua API evaluates variable name instead of valueLua API 评估变量名而不是值
【发布时间】:2012-05-22 14:22:44
【问题描述】:

我正在使用 Lua 5.2 C 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() 方法)。

【问题讨论】:

    标签: c api lua


    【解决方案1】:

    您已将错误索引传递给lua_tolstring。参考手册明确指出

    0 绝不是可接受的索引。

    您对相对值使用负索引,对绝对值使用正索引。这些条件都不是 0。

    【讨论】:

    • 叹息。现在我看到它的尴尬明显。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多