c++ - 从 C++ 检查 Lua 堆栈项的值

标签 c++ lua stack

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"

有什么想法吗?

最佳答案

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

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

lua_pcall() 函数也返回一个状态码,您可能也想验证一下。

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

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

关于c++ - 从 C++ 检查 Lua 堆栈项的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/564100/

相关文章:

C++ 概念等同于 std::decay?

c++ - 如何使用 openimageIO 将 RGB 值存储在数组中? (使用 C++、OpenGL)

c++ - 在 Qi 中对解析器公开的属性应用操作

android-activity - 具有 Activity 堆栈的全局应用程序类

java - DFS 方法无法正常工作

java - java中栈元素与对象的比较

C++ for循环多条件不一致

c - 在 C 中获取 Lua 表大小

string - 检查 lua 中表中的字符串值

lua - 我怎样才能从lua中的 float 中只得到小数?