Lua栈操作

327 阅读2分钟

Lua和 C交互

Lua和C的所有交互都是通过了栈。用简单的话来讲就是这个数据结构让Lua可以从栈中取数据和放数据,也可以让C来取数据和放数据。栈中的数据通过索引值进行定位,所有进栈的东西都有一个标号,这个标号就是index。

栈顶为-1,栈底为1(代表第一个入栈的元素)。正数表示相对于栈底的位置(第几位),负数表示相遇栈顶的位置。

常用的几个C-API

  • lua_gettop()

用于返回栈中元素的个数,同事也是栈顶元素的索引。栈中有多少个元素,就会return几。返回值是栈中元素个数,也同样是栈顶元素的index。

  • lua_settop(lua_State L, int index) 用于把对战的栈顶索引设置为指定的数值。例如,一个栈有8个元素,调用函数index = 7,相当于堆栈的栈顶元素index 由 8 -> 7,操作相当于删除了栈顶元素。使用正数为从栈顶开始计算位置,如果使用负数为从栈底开始计算位置。

  • lua_pushvalue(lua_State L, int index) 函数说明:Push a copy of the element at the given valid index onto the stack

10 20 30 40 50 * -> lua_pushvalue(L, 3) -> 10 20 30 40 50 30 *

  • lua_remove(lua_State L, int index) lua_remove 删除指定给定索引的元素,并将这一所引致上的元素来填补空缺,
  • lua_replace(lua_State L, int index) lua replace将栈顶元素压入指定位置而不移动任何元素(因此指定位置的元素的值被替换) 10 20 30 40 50* -> lua_replace(L, 2) -> 10 50 30 40*

C加载lua函数的用法

  • lua_getglobal(lua_State L, const char name) 将全局name的值压到栈顶

  • lua_is(lua_State L, int index) 检查变量是不是某个类型,index指示变量顺序,栈顶为-1

  • lua_to(lua_State L, int index) 获取栈中的变量, 然后转化为某个指定的类型并且返回

  • lua_close() 销毁所有在指定的Lua State上的所有对象,同时释放所有该State使用的动态分配的空间