首先,我們來簡單了解一下lua中的table。table是lua中唯一內建的資料結構型別。也就是說,它沒有內建list、array、map、set等等資料結構型別。在lua裡面那些資料型別都是通過table來實現的。在lua中的,table是非常強大和重要的。當我們需要將lua嵌入到應用程式裡面的時候,不可避免的需要操作table。本文就來討論一下如何在c語言中讀取lua中table的內容。
其實,lua中table是array與map的混合。它即可想array一樣使用index去訪問,也可以像map一樣通過key去訪問。關鍵在於你是如何定義。當你定義table是沒有使用key時,你就可以認為它是array,通過index訪問他的成員;當你定義時使用了key,就可以認為它是map,通過key來訪問它的成員。當然,這兩種還可以混合起來使用。所以,我們可以這樣來定義乙個table
tlb={} --定義了乙個空的table。
tlb= --定義可以用index訪問的table。
print(tlb[1] .. ", " .. tlb[4]) -- 輸出:1, 4
tlb= --定義可以用key訪問的table。
print(tlb.a .. ", " .. tlb.b) -- 輸出:1, 4
tlb= --定義乙個混合的table。
print(tlb.c .. ", " .. tlb[1]) -- 輸出:1, 3
請注意:
tlb[1]等於3而不是1。至於為什麼,讀者可以自己思考一下。
其實,上面的key是字串。之所以沒有帶引號是因為lua提供了語法糖。原始的定義應該如下:
tlb=
訪問應該是:tlb["a"]
ok,我們現在對lua中的table已經有了最基本的了解了。我們來了解一下如何在c/c++中讀取table的內容。非常簡單,直接上**:
luat_test1=
luat_test2=
#include
static
void readtablefromitem(lua_state *l, const
char* lpsztablename, const
char* lpsztableitem)
static
void readtablefromindex(lua_state *l, const
char* lpsztablename, int index)
static
void enumtableitem(lua_state *l, const
char* lpsztablename)
printf("\n");
lua_pop(l, 1);
}int main (int argc, char* argv)
cflag=`pkg-config --cflags lua5.1`
ldflag=`pkg-config --libs lua5.1`
cc=g++
all: readluatable
readluatable : readluatable.cpp
$(cc) -o $@
$(cflag) $(ldflag) $<
型別
值作業系統
5 C 中的泛型
泛型主要的思想是邏輯復用,你不需要為所有的資料結構都寫一遍該邏輯,如元素的比較 排序等,不同的類可以呼叫乙個泛型函式。主要介紹泛型機制的優點 泛型型別與泛型函式 型別約束與型別推斷 1.泛型的優點 a.安全,因為指定了型別,所以不再存在因為型別轉換而出現的型別不安全。b.高效,因為不同型別之間的轉換...
c遍歷lua中table的方法
遍歷乙個table,肯定是不知道table的每個key的,所以lua getfield肯定是不可行的。要遍歷table,最主要的是lua next函式,該函式主要接受乙個int引數,代表當前table所在的索引,索引之上應該需要乙個key,每次lua next都會從當前的key遍歷下乙個key,於是...
Lua中table的長度
官方文件是這麼描述 的 取長度操作符寫作一元操作 字串的長度是它的位元組數 就是以乙個字元乙個位元組計算的字串長度 table t 的長度被定義成乙個整數下標 n 它滿足 t n 不是nil而 t n 1 為nil 此外,如果 t 1 為nil,n 就可能是零。對於常規的陣列,裡面從 1 到 n 放...