CONTENTS
备注:
1 本笔记只记录了LUA的一小部分内容,对于LUA的描述并不全面,以后随用随增加吧。
2 本笔记参考《Lua程序设计 第二版》,截图和代码属于原作者所有。
3 作者初学LUA,经验和能力有限,笔记可能有错误,还请各位路过的大牛们给予指点。
4 API参考网址:参考网址: http://www.codingnow.com/2000/download/lua_manual.html
Lua和C通过栈进行交互。这里笔记下Lua和C通过栈进行数据传递使用的API。
lua_getglobal:
void lua_getglobal (lua_State *L, const char *name);
把全局变量 name 里的值压入堆栈。 这个是用一个宏定义出来的:
#define lua_getglobal(L,s) lua_getfield(L, LUA_GLOBALSINDEX, s)
lua_setglobal:
void lua_setglobal (lua_State *L, const char *name);
从堆栈上弹出一个值,并将其设到全局变量 name 中。 它由一个宏定义出来:
#define lua_setglobal(L,s) lua_setfield(L, LUA_GLOBALSINDEX, s)
lua_gettable:
void lua_gettable (lua_State *L, int index);
把 t[k] 值压入堆栈, 这里的 t 是指有效索引 index 指向的值, 而 k 则是栈顶放的值。
这个函数会弹出堆栈上的 key (把结果放在栈上相同位置)。
lua_getfield:
void lua_getfield (lua_State *L, int index, const char *k);
把 t[k] 值压入堆栈, 这里的 t 是指有效索引 index 指向的值。
lua_settable:
void lua_settable (lua_State *L, int index);
作一个等价于 t[k] = v 的操作, 这里 t 是一个给定有效索引 index 处的值, v 指栈顶的值, 而 k 是栈顶之下的那个值。
这个函数会把键和值都从堆栈中弹出。
lua_setfield:
void lua_setfield (lua_State *L, int index, const char *k);
做一个等价于 t[k] = v 的操作, 这里 t 是给出的有效索引 index 处的值, 而 v 是栈顶的那个值。
这个函数将把这个值弹出堆栈。
lua_createtable:
void lua_createtable (lua_State *L, int narr, int nrec);
创建一个新的空 table 压入堆栈。 这个新 table 将被预分配 narr 个元素的数组空间 以及 nrec 个元素的非数组空间。 当你明确知道表中需要多少个元素时,预分配就非常有用。 如果你不知道,可以使用函数 lua_newtable。
lua_newtable:
void lua_newtable (lua_State *L);
创建一个空 table ,并将之压入堆栈。 它等价于 lua_createtable(L, 0, 0) 。
数组形式的访问:
lua_rawget:
void lua_rawget (lua_State *L, int index);
类似于 lua_gettable, 但是作一次直接访问(不触发元方法)。
lua_rawgeti:
void lua_rawgeti (lua_State *L, int index, int n);
把 t[n] 的值压栈, 这里的 t 是指给定索引 index 处的一个值。 这是一个直接访问;就是说,它不会触发元方法。
lua_rawset:
void lua_rawset (lua_State *L, int index);
类似于 lua_settable, 但是是作一个直接赋值(不触发元方法)。
lua_rawseti:
void lua_rawseti (lua_State *L, int index, int n);
等价于 t[n] = v, 这里的 t 是指给定索引 index 处的一个值, 而 v 是栈顶的值。函数将把这个值弹出栈。 赋值操作是直接的;就是说,不会触发元方法。
发表评论