我正在努力学习lua,我似乎被困在这里。
由于某种原因,以下代码实际上并不运行lua文件。
int main()
{
lua_State* L = luaL_newstate();
luaL_openlibs(L);
int width = 0;
int height = 0;
if(!luaL_loadfile(L, "./src/luaconf.lua") || !lua_pcall(L, 0, 0, 0))
{
lua_getglobal(L, "width");
lua_getglobal(L, "height");
if(!lua_isnumber(L, -2))
{
luaL_error(L, "width isn't a number");
}
else
{
width = lua_tointeger(L, -2);
}
if(!lua_isnumber(L, -1))
{
luaL_error(L, "height isn't a number");
}
else
{
height = lua_tointeger(L, -1);
}
}
printf("%i x %i", width, height);
return 0;
}
我知道如果我将if(!luaL_loadfile(L, "./src/luaconf.lua") || !lua_pcall(L, 0, 0, 0)
更改为if(luaL_dofile(L, "./src/luaconf.lua"))
它会起作用,但我想知道为什么上面的代码不起作用。
不应该lua_pcall运行lua代码吗?如果不是为什么不呢?
luaconf.lua
width = 500
height = 40
答案 0 :(得分:4)
请注意代码:
if(!luaL_loadfile(L, "./src/luaconf.lua") || !lua_pcall(L, 0, 0, 0))
如果luaL_loadfile
成功,则返回LUA_OK
,其值为0
,因此||
的左操作数评估为1
,根据简短电路,lua_pcall
将不会被执行。
所以你想要的可能是:
if ((luaL_loadfile(L, "./src/luaconf.lua") || lua_pcall(L, 0, 0, 0))
{
//error handle
}
else
{
//normal handle
}