3

ルアを学習しようとしていますが、ここで立ち往生しているようです。

何らかの理由で、次のコードは実際には 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、 の左オペランドは||として評価され1、短絡に従ってlua_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 に答える