Lua使用实记

c调用lua堆栈常用操作——-

===================初级========================

void lua_gettop() : 用于返回栈中元素的个数,同时也是栈顶元素的索引,因为栈底是1,所以栈中有多少个元素,栈顶索引就是多少。

void lua_settop(int index) : 设置栈顶,也是设置栈的大小,多的去除,少的填nil。– #define lua_pop(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 lua_newtable() : 创建一个空表,将其压入栈。与lua_createtable(0,0)一个意思。

void lua_getfield(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 lua_gettable(int index) : 弹出栈顶,并压入t[k]值,t为索引index的表,k为栈顶值。此方法将调用被修改的__index的方法,如果被修改过的话。

void lua_settable(int index) : 设置表t[k]=v,t为索引index的表,v是栈顶元素,k为栈顶下面一个元素。例如 lua_settable(-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 lua_register(const char *name, lua_CFunction f) : 向lua注册名字为name的f方法。这个方法相当于 #define lua_register(L,n,f) (lua_pushcfunction(L, f), lua_setglobal(L, n))

转载请注明出处:http://www.luzexi.com

· 前端技术, 其他技术

感谢您的耐心阅读

Thanks for your reading

  • 版权申明

    本文为博主原创文章,未经允许不得转载:

    Lua使用实记

    Copyright attention

    Please don't reprint without authorize.

  • 微信公众号,文章同步推送,致力于分享一个资深程序员在北上广深拼搏中对世界的理解

    QQ交流群: 777859752 (高级程序书友会)