4

テーブル(文字列のセットを含む)を返すLua関数があります。この関数は、次のコードを使用して正常に実行されます。

lua_pushstring (lua, "funcname");  
lua_gettable   (lua, LUA_GLOBALSINDEX);
lua_pushstring(lua, "someparam");
lua_pcall (lua, 1, 1, 0);

関数はテーブルを返します。C ++コードからその内容を読み取るにはどうすればよいですか?

4

2 に答える 2

5

結果のテーブルをトラバースする方法を尋ねる場合は、lua_nextが必要です(リンクには例も含まれています)。egarciaが言ったように、0を返す場合、lua_pcall関数が返すテーブルはスタックの一番上にあります。

于 2010-10-19T17:37:58.527 に答える
1

関数がエラーをスローしない場合、lua_pcallは次のようになります。

  1. スタックからパラメータを削除します
  2. 結果をスタックにプッシュします

これは、関数がエラーをスローしない場合は、すぐにlua_setfieldを使用できることを意味します-lua_calllua_pcall同じように機能します:

lua_pushstring (lua, "funcname");  
lua_gettable   (lua, LUA_GLOBALSINDEX);
lua_pushstring(lua, "someparam");
lua_pcall (lua, 1, 1, 0);
lua_setfield(L, LUA_GLOBALSINDEX, "a");        /* set global 'a' */

と同等になります:

a = funcname(someparam)
于 2010-10-19T15:52:50.117 に答える