好记性不如铅笔头

C && C++, Lua, 编程

Lua快速学习笔记:如何在C函数中保存状态

CONTENTS

备注:

1 本笔记只记录了LUA的一小部分内容,对于LUA的描述并不全面,以后随用随增加吧。
2 本笔记参考《Lua程序设计 第二版》,截图和代码属于原作者所有。
3 作者初学LUA,经验和能力有限,笔记可能有错误,还请各位路过的大牛们给予指点。
4 API参考网址:参考网址: http://www.codingnow.com/2000/download/lua_manual.html 

注册表:

使用字符串作为key:

引用方式:

地址方式:

lua_pushlightuserdata:

void lua_pushlightuserdata (lua_State *L, void *p);
把一个 light userdata 压栈。
userdata 在 Lua 中表示一个 C 值。 light userdata 表示一个指针。 它是一个像数字一样的值: 你不需要专门创建它,它也没有独立的 metatable , 而且也不会被收集(因为从来不需要创建)。 只要表示的 C 地址相同,两个 light userdata 就相等。

环境:

upvalue:

简单示例:

lua_pushcclosure:

void lua_pushcclosure (lua_State *L, lua_CFunction fn, int n);
把一个新的 C closure 压入堆栈。
当创建了一个 C 函数后,你可以给它关联一些值,这样就是在创建一个 C closure ; 接下来无论函数何时被调用,这些值都可以被这个函数访问到。 为了将一些值关联到一个 C 函数上, 首先这些值需要先被压入堆栈(如果有多个值,第一个先压)。 接下来调用 lua_pushcclosure 来创建出 closure 并把这个 C 函数压到堆栈上。 参数 n 告之函数有多少个值需要关联到函数上。 lua_pushcclosure 也会把这些值从栈上弹出。

lua_upvalueindex:

无论何时去调用 C 函数,函数的 upvalue 都被放在指定的伪索引处。 我们可以用 lua_upvalueindex 这个宏来生成这些伪索引。 第一个关联到函数的值放在 lua_upvalueindex(1) 位置处,依次类推。 任何情况下都可以用 lua_upvalueindex(n) 产生一个 upvalue 的索引, 即使 n 大于实际的 upvalue 数量也可以。它都可以产生一个可接受但不一定有效的索引。

发表评论

5 − 1 =

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据