首先多多学习开源项目,分析别人的代码架构,吸取对方优秀的编程思想,理解后下次开发用上
第二:记住系统提供给我们的快速开发的方法,常用的方法都有日期函数,字符串函数,文件函数等,比如下面的函数:
一个不透明的结构, 它指向一条线程并间接(通过该线程)引用了整个 Lu a 解释器的状态。 L ua 库是完全可重入的: 它没有任何全局变量。 状态机所有的信息都可以通过这个结构访问到。
这个结构的指针必须作为第一个参数传递给每一个库函数。 l ua_newstate 是一个例外, 这个函数会从头创建一个 L ua 状态机。
l。a_status
返回线程 L 的状态。
正常的线程状态是 0 (LUA_OK)。 当线程用 lua_resume 执行完毕并抛出了一个错误时, 状态值是错误码。 如果线程被挂起,状态为 LUA_YIELD 。
你只能在状态为 LUA_OK 的线程中调用函数。 你可以延续一个状态为 LUA_OK 的线程 (用于开始新协程)或是状态为 LUA_YIELD 的线程 (用于延续协程)。
lu a_stringtonumber
size_t lu a_stringtonumber (l ua_State *L, const char *s)
将一个零结尾的字符串 s 转换为一个数字, 将这个数字压栈,并返回字符串的总长度(即长度加一)。 转换的结果可能是整数也可能是浮点数, 这取决于 Lua 的转换语法(。 这个字符串可以有前置和后置的空格以及符号。 如果字符串并非一个有效的数字,返回 0 并不把任何东西压栈。 (注意,这个结果可以当成一个布尔量使用,为真即转换成功。)
lu a_toboolean
int lu a_toboolean (lu a_State *L, int index)
把给定索引处的 Lu a 值转换为一个 C 中的布尔量( 0 或是 1 )。 和 L ua 中做的所有测试一样, lua_toboolean 会把任何不同于 false 和 nil 的值当作真返回; 否则就返回假。 (如果你想只接收真正的 boolean 值, 就需要使用 lua_isboolean 来测试值的类型。)
lu a_tocfunction
lu a_CFunction lua_tocfunction (lu a_State *L, int index)
把给定索引处的 L ua 值转换为一个 C 函数。 这个值必须是一个 C 函数; 如果不是就返回 NULL 。
lu a_tointeger
lua_Integer l ua_tointeger (lu a_State *L, int index)
等价于调用 l ua_tointegerx, 其参数 isnum 为 NULL。
lu a_tointegerx
l ua_Integer lua_tointegerx (lua_State *L, int index, int *isnum)
将给定索引处的 L。a 值转换为带符号的整数类型 lu a_Integer。 这个 Lu a 值必须是一个整数,或是一个可以被转换为整数 (3)的数字或字符串; 否则,lua_tointegerx 返回 0 。
如果 isnum 不是 NULL, *isnum 会被设为 *** 作是否成功。
lu a_tolstring
const char *lu a_tolstring (lu a_State *L, int index, size_t *len)
把给定索引处的 Lua 值转换为一个 C 字符串。 如果 len 不为 NULL , 它还把字符串长度设到 *len 中。 这个 L ua 值必须是一个字符串或是一个数字; 否则返回返回 NULL 。 如果值是一个数字, lua_tolstring 还会 把堆栈中的那个值的实际类型转换为一个字符串。 (当遍历一张表的时候, 若把 lua_tolstring 作用在键上, 这个转换有可能导致 lua_next 弄错。)
lua_tolstring 返回一个已对齐指针 指向 Lua 状态机中的字符串。 这个字符串总能保证 ( C 要求的)最后一个字符为零 ('\0') , 而且它允许在字符串内包含多个这样的零。
因为 Lua 中可能发生垃圾收集, 所以不保证 lua_tolstring 返回的指针, 在对应的值从堆栈中移除后依然有效。
代码是编定程序的中文简称,就是让计算机代为解决某个问题,对某个计算体系规定一定的运算方式,使计算体系按照该计算方式运行,并最终得到相应结果的过程为了使计算机能够理解(understand)人的意图,人类就必须将需解决的问题的思路、方法和手段通过计算机能够理解的形式告诉计算机,使得计算机能够根据人的指令一步一步去工作,完成某种特定的任务。
代码集合就是把某些代码写到一个起名字的符合一定规范的代码块中,其中包括自定义的,也包括系统提供给我们的,比如下面的:让出协程(线程)。
当 C 函数调用了 lu a_yieldk, 当前运行的协程会挂起, 启动这个线程的 lu a_resume 调用返回。 参数 nresults 指栈上需返回给 lu a_resume 的返回值的个数。
当协程再次被延续时, Lu a 调用延续函数 k 继续运行被挂起()的 C 函数。 延续函数会从前一个函数中接收到相同的栈, 栈中的 n 个返回值被移除而压入了从 lu a_resume 传入的参数。 此外,延续函数还会收到传给 lu a_yieldk 的参数 ctx。
通常,这个函数不会返回; 当协程一次次延续,将从延续函数继续运行。 然而,有一个例外: 当这个函数从一个逐行运行的钩子函数) 中调用时,lu a_yieldk 不可以提供延续函数。 (也就是类似 lu a_yield 的形式), 而此时,钩子函数在调用完让出后将立刻返回。 Lu a 会使协程让出,一旦协程再次被延续, 触发钩子的函数会继续正常运行。
当一个线程处于未提供延续函数的 C 调用中,调用它会抛出一个错误。 从并非用延续方式(例如:主线程)启动的线程中调用它也会这样。
这个函数等价于调用 l ua_yieldk, 不同的是不提供延续函数()。 因此,当线程被延续,线程会继续运行调用 l ua_yield 函数的函数。
返回保存在 Lua 内核中储存的版本数字的地址。 当调用时传入一个合法的 l。a_State , 返回创建该状态机时的版本地址。 如果用 NULL 调用, 返回调用者的版本地址。
把给定索引处的值转换为一般的 C 指针 (void*) 。 这个值可以是一个用户对象,表 ,线程或是一个函数; 否则, lu a_topointer 返回 NULL 。 不同的对象有不同的指针。 不存在把指针再转回原有类型的方法。
lu a_tolstring 返回一个已对齐指针 指向 L ua 状态机中的字符串。 这个字符串总能保证 ( C 要求的)最后一个字符为零 ('\0') , 而且它允许在字符串内包含多个这样的零。
因为 Lu a 中可能发生垃圾收集, 所以不保证 lu a_tolstring 返回的指针, 在对应的值从堆栈中移除后依然有效。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)