2012-07-26 59 views
1

我正在尋找的是這樣的:將Lua錶轉換爲C數組?

LUA腳本

MY_ARRAY = { 
00, 10, 54, 32, 
12, 31, 55, 43, 
34, 65, 76, 34, 
53, 78, 34, 93 
} 

C代碼

lua_Number array[] = lua_getarray("MY_ARRAY"); 

這可能嗎?在C中處理lua表更容易嗎?

回答

4

你可以自己寫這樣的功能!它不應該是太多的線。但是最好使用指針而不是數組,因爲它們可以指向任意數量的元素。該接口可以是這樣的:

lua_Number *values; 
size_t nvalues; 
values = luaGetNumbers("MY_ARRAY", &nvalues); 
/* the number of values is now nvalues */ 
for (int i=0; i<nvalues; i++) { 
    /* do something with values[i] */ 
} 
free(values); 

和實現應使用以下功能(從http://www.lua.org/manual/5.2/manual.html):

void lua_getglobal (lua_State *L, const char *name); 

壓棧全局名稱的值。


void lua_gettable (lua_State *L, int index); 

壓棧的值t [K],其中t是在給定的有效指數和k處的 的值是在堆棧的頂部的值。

該函數從堆棧中彈出密鑰,將結果值 置於其位置)。就像在Lua中一樣,這個函數可能觸發一個「索引」事件的元方法(見§2.4)。


lua_Number lua_tonumberx (lua_State *L, int index, int *isnum); 

給定的可接受的索引到C型 lua_Number(見lua_Number)在Lua的值轉換。 Lua值必須是可轉換爲數字的數字或 字符串(請參閱第3.4.2節);否則,lua_tonumberx 返回0

如果ISNUM不是NULL,其指示對象被分配一個布爾值, 指示操作是否成功。


void lua_len (lua_State *L, int index); 

返回給定的可接受的索引處的值的 「長度」;它相當於Lua中'#'運算符的 (請參閱第3.4.6節)。結果是 推入堆棧。