5 C 讀取Lua中Table的內容

2021-08-09 06:22:28 字數 1863 閱讀 5697

首先,我們來簡單了解一下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 放...