1

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"

何か案は?

4

2 に答える 2

2

考えられる問題はluaL_loadfile()、同じ値lua_load()または 1 つの追加のエラー コードを返すことが文書化されていることです。どちらの場合も、戻り値は ですint。0 は成功を意味し、ゼロ以外の値はエラー コードです。

したがって、ファイルがロードされた場合、テストluaL_loadfile(...) == NULLtrueになりますが、コードはそれをエラーとして呼び出して返します。

この関数lua_pcall()はステータス コードも返します。これも確認することをお勧めします。

それ以外の場合、示されているスクリプトはグローバル変数を作成し、lua_getglobal()それを でテストできるスタックに取得しlua_isstring()ますlua_tostring()。後者の関数はconst char *、nul で終わる文字列を指すか、スタック インデックスの値を文字列に変換できない場合は NULL を返します。残りの詳細とlua_tostring()ループ内での使用に関する注意事項については、リンクされている Lua リファレンス マニュアルを参照してください。

編集:いくつかの場所でマニュアルへのより良いリンクを追加しました。

于 2009-02-19T06:53:25.310 に答える
0

luaL_loadfile をlua_dofileに置き換えたいと思います。lua_pcall は不要です。私の推測では、luaL_loadfile を使用してファイルを関数としてロードし、pcall を使用して実行すると、必要なグローバルが作成されない可能性があります。

于 2009-02-19T06:43:42.370 に答える