要理解Lua和C的交互,先要理解堆棧和全局表兩個(gè)概念
堆棧
Lua和C/C++語言交互的主要方法是一個(gè)無處不在的虛擬棧,棧的特點(diǎn)是先進(jìn)后出.
- 在Lua中弱恒,Lua堆棧就是一個(gè)struct
- 堆棧索引的方式可是是正數(shù)也可以是負(fù)數(shù)
- 正數(shù)索引1永遠(yuǎn)表示棧底,負(fù)數(shù)索引-1永遠(yuǎn)表示棧頂
全局表
Lua的全局表可以想象成一個(gè)map哈希表結(jié)構(gòu),比如Lua有一個(gè)變量:
name = "hello world"
全局表中存放了name
和hello world
的對(duì)應(yīng)關(guān)系, 可以通過name
在全局表中找到對(duì)應(yīng)的hello world
交互方式
hello.lua
name = "hello world"
- C/C++想要獲取Lua中的
name
字符串的值, 首先把name
放到堆棧(棧頂),方便Lua看到; - Lua從堆棧(棧頂)獲取到
name
的值, 此時(shí)棧頂變?yōu)榭? - Lua去全局表中查找
name
對(duì)應(yīng)的字符串; - 全局表返回對(duì)應(yīng)的字符串
hello world
; - Lua再次把
hello world
放到堆棧(棧頂); - C/C++從堆棧(棧頂)獲取name的值.
注意:為了更好的展示原理,文中的圖片來自于網(wǎng)絡(luò)上博客中圖片.