1

如何检查 Lua 中堆栈顶部的值?

我有以下 C++ 代码:

if (luaL_loadfile(L, filename) == NULL) {
        return 0;// error..
    }

    lua_pcall(L,0,0,0); // execute the current script..

    lua_getglobal(L,"variable");

    if (!lua_isstring(L,-1)){ // fails this check..
        lua_pop(L,1);
        return 0; // error
}

有问题的文件的内容是

-- A comment
variable = "MyString"

有任何想法吗?

4

2 回答 2

2

可能的问题是luaL_loadfile()记录返回相同的值lua_load()或一个额外的错误代码。在任何一种情况下,返回值都是一个int,其中 0 表示成功,非零值是错误代码。

因此,如果文件已加载,则测试luaL_loadfile(...) == NULL,但代码调用错误并返回。

该函数lua_pcall()还返回一个状态代码,您可能还想验证它。

否则,所示脚本确实会创建一个全局变量,lua_getglobal()并将其检索到可以使用 测试它的堆栈中lua_isstring(),或者如果它与 具有足够的字符串相似性,可能更有用的是让您返回它的值lua_tostring()。后一个函数将返回一个const char *指向以 nul 结尾的字符串,或者如果堆栈索引处的值无法转换为字符串,则返回 NULL。lua_tostring()请参阅链接中的 Lua 参考手册以获取其余详细信息以及有关在循环内使用的警告。

编辑:我在几个地方添加了更好的手册链接。

于 2009-02-19T06:53:25.310 回答
0

我想你想用 lua_dofile 替换luaL_loadfile。lua_pcall 是不必要的。我的猜测是使用 luaL_loadfile 将文件作为函数加载,然后使用 pcall 运行它可能不会创建您想要的全局变量。

于 2009-02-19T06:43:42.370 回答