gpt4 book ai didi

c++ lua设置全局变量时出错

转载 作者:行者123 更新时间:2023-11-30 04:15:53 27 4
gpt4 key购买 nike

我有以下代码:

lua_State *lua;
lua = lua_open();
luaL_openlibs(lua);

std::string code = "print(gvar)\n"
"function test()\n"
"print(gvar)\n"
"end\n";

if(!luaL_loadstring(lua, code.c_str())){
if (lua_pcall(lua, 0, 0, 0)){
const char* error = lua_tostring(lua, -1);
lua_pop(lua, 1);
}
}

lua_pushstring(lua, "100");
lua_setglobal(lua, "gvar");
if (lua_pcall(lua, 0, 0, 0)){
const char* error = lua_tostring(lua, -1); // returns "attempt to call a nil value"
lua_pop(lua, 1);
}

lua_close(lua);

调用函数和获取全局变量工作正常,但是当我尝试设置全局变量时,我得到“尝试调用 nil 值”。我不明白这是为什么?

最佳答案

if(!luaL_loadstring(lua, code.c_str())){
if (lua_pcall(lua, 0, 0, 0)){
const char* error = lua_tostring(lua, -1);
lua_pop(lua, 1);
}
}

此代码使用 luaL_loadstring() 将字符串加载到匿名函数中,将其放入堆栈,然后使用 lua_pcall(lua, 0, 0, 0) 执行该函数>.

lua_pushstring(lua, "100");
lua_setglobal(lua, "gvar");
if (lua_pcall(lua, 0, 0, 0)){
const char* error = lua_tostring(lua, -1); // returns "attempt to call a nil value"
lua_pop(lua, 1);
}

这段代码将字符串压入堆栈,然后设置全局变量gvar。调用 lua_setglobal() 后,堆栈上应该没有任何内容。 var 已经存在。

现在之后,您尝试使用 lua_pcall 调用位于堆栈顶部的函数,但堆栈为空 - 这就是为什么您得到 attempt to call a nil value 消息。

关于c++ lua设置全局变量时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18101713/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com