Lua使用实记(转)

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))

传送门

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 14,766评论 0 38
  • 名称 说明 docLua 相关的文档,包括了编译文档、接口文档等 Makefile 编译Lua使用,在...
    一川烟草i蓑衣阅读 5,457评论 0 1
  • 第一篇 语言 第0章 序言 Lua仅让你用少量的代码解决关键问题。 Lua所提供的机制是C不擅长的:高级语言,动态...
    testfor阅读 7,811评论 1 7
  • 日本的肥胖率在全球是最低的,日本的女性也是以苗条、健康闻名。身材的胖瘦,虽然遗传起着比较重要的作用,但许多人也表示...
    清風长春阅读 3,290评论 0 0
  • 下午三点开会,共享单两点半到办公楼下,刚停好车,一光着膀子的小男孩过来问,“叔叔,能不能借你电话打个电话给我妈妈”...
    爱讲故事的萄萄爸阅读 2,761评论 0 0

友情链接更多精彩内容