2010-10-19 78 views
4

的Lua表返回值我有一個Lua函數返回表(包含組字符串) 功能運行正常使用此代碼:如何閱讀從C++

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

函數返回一個表。我如何從我的C++代碼中讀取它的內容?

回答

6

如果你問如何遍歷結果表,你需要lua_next(該鏈接還包含一個例子)。由於egarcia表示,如果lua_pcall返回0,函數返回的表可以在堆棧頂部找到。

+1

'lua_next()'將枚舉表的所有內容,但是,如果索引已知,則直接訪問表可能更容易。如果已知索引,'lua_gettable()','lua_getfield()','lua_rawget()'或者'lua_rawgeti()'都可以訪問表的內容。 – gwell 2010-10-19 19:40:17

+0

@ gwell:true,但考慮到OP在他的示例中使用了'lua_gettable',我假定他至少已經知道其中的一些。 – sbk 2010-10-20 12:18:24

1

如果函數沒有拋出任何錯誤,那麼lua_pcall會:

  1. 從堆棧
  2. 推結果中去除參數堆棧

這意味着,如果你的功能不會拋出任何錯誤,你可以馬上使用lua_setfield - lua_pcall就像lua_call

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) 
+1

將表分配給全局與讀取其內容不完全相同。 – gwell 2010-10-19 19:06:33

+0

你是對的。 sbk的答案比我的好。 – kikito 2010-10-19 22:04:01