【问题标题】:Checking the value of a Lua stack item from C++从 C++ 检查 Lua 堆栈项的值
【发布时间】:2010-10-08 12:35:18
【问题描述】:

如何在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"

有什么想法吗?

【问题讨论】:

    标签: c++ lua stack


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 将跟踪这条线索并更新您的结果,谢谢! :D
    • 好吧,看来你是在正确的轨道上.. luaL_loadfile 返回 6.. 这是什么意思?在哪里可以找到此错误代码列表?谢谢..
    • nvm,想通了,多亏了你 :) 我传入了错误的文件名,它无法打开它..需要完全限定的路径名​​..
    【解决方案2】:

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

    【讨论】:

    • 不,lua_dofile 加载文件并运行它。我想分开做。我是否错误地使用了 loadfile 和 pcall?
    猜你喜欢
    • 2015-05-11
    • 2021-05-31
    • 1970-01-01
    • 2015-11-05
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    • 2013-10-03
    • 2011-09-24
    相关资源
    最近更新 更多