3

我正在尝试学习 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
4

1 回答 1

4

请注意,在代码中:

if(!luaL_loadfile(L, "./src/luaconf.lua") || !lua_pcall(L, 0, 0, 0)) 

如果luaL_loadfile成功,则返回LUA_OK值为 的,因此根据短路计算结果为0的左操作数将不会被执行。||1lua_pcall

所以你想要的可能是:

if ((luaL_loadfile(L, "./src/luaconf.lua") || lua_pcall(L, 0, 0, 0))
{
    //error handle
}
else
{
    //normal handle
}
于 2013-08-25T12:41:14.643 回答