c调用lua堆栈常用操作-------
===================初级========================
void lua_gettop() : 用于返回栈中元素的个数,同时也是栈顶元素的索引,因为栈底是1,所以栈中有多少个元素,栈顶索引就是多少。
void luasettop(int index) : 设置栈顶,也是设置栈的大小,多的去除,少的填nil。-- #define luapop(L,n) lua_settop(L,-(n)-1)
void lua_pushvalue(int index) : 拷贝索引index元素并压入栈。
void lua_remove(int index) : 删除索引index。
void lua_replace(int index) : 弹出栈顶元素,并将其替换到索引index元素。
void lua_getglobal(const char *name) : 把全局变量name压入栈顶。
void lua_pop(int n) : 推出栈顶(移除)n个元素。
void lua_insert(int index) : 弹出栈顶,并将其插入索引index中。
void lua_remove(int index) : 移除索引index的元素。
lua_is***(int index) 检查变量是不是某个类型,index指示变量的顺序,栈顶为-1。
lua_to***(int index) 获取栈中的变量,然后转换为某个指定的类型,并返回。
lua_push***() 压入某类型元素。
int lua_type(int index) : 获得索引index的值的类型。
===================中级========================
void lua_call(int nargs, int nresults) : 调用方法,其中nargs为参数数量,nresults为结果数量。栈中必须保持 ..... func , arg1 , arg2 ,art3 () ,表示栈顶,调用后func,arg都会消失,只留下结果,如果调用没有问题的话。
int lua_pcall(int nargs, int nresults, int errfunc) : 功能pcall与call一样,区别在最后多了个自定义错误处理,当调用出错后,会调用其栈中索引方法。pcall返回0为无错误,其他则表示调用有错。如果errfunc为0,则报错调用原始方法。
void lua_createtable(int narr, int nrec) : 创建一个narr行nrec列的table,将其压入栈。
void luanewtable() : 创建一个空表,将其压入栈。与luacreatetable(0,0)一个意思。
void luagetfield(int index, const char *k) : t[k],获取表(索引为t的表)中的k值,并压入栈。这个会调用被修改的_index的方法,如果被修改过的话。
void lua_setfield(int index, const char *k) : 设置t[k] = v,t为索引index的表,k为参数k值,v为栈顶元素,并弹出栈顶元素。此调用会触发修改过的newindex方法。
void lua_getglobal(const char *name) : 获取全局变量name,并压入栈顶。
void lua_setglobal(const char *name) : 弹出栈顶,并将其设置为全局变量name的值。
void luagettable(int index) : 弹出栈顶,并压入t[k]值,t为索引index的表,k为栈顶值。此方法将调用被修改的_index的方法,如果被修改过的话。
void luasettable(int index) : 设置表t[k]=v,t为索引index的表,v是栈顶元素,k为栈顶下面一个元素。例如 luasettable(-3) ---- table , "key" , "value" () ,表示栈顶。并弹出v(栈顶)和k(栈顶下面)元素,此调用会触发修改过的newindex方法。
void lua_rawget(int index) : 与gettable一样,但调用的索引方法是原始的。
void lua_rawset(int index) : 与settable一样,但调用的索引方法是原始的。
void lua_rawgeti(int index, int n) : 压入t[n]值,t为索引index的表,n为参数n,调用的索引方法是原始的。
void lua_rawseti(int index, int n) : 设置t[n]=v,t为索引index的表,v为栈顶值,n为参数n,并弹出栈顶元素。调用的索引方法为原始的。
int lua_getmetatable(int index) : 压入索引index的值的metatable,如果索引index的值有metatable则返回非0,否则返回0并不压入任何元素。
int lua_setmetatable(int index) : 弹出栈顶,并将其设置为索引index值的metatable。
void luaregister(const char *name, luaCFunction f) : 向lua注册名字为name的f方法。这个方法相当于 #define luaregister(L,n,f) (luapushcfunction(L, f), lua_setglobal(L, n))