- 博客(11)
- 收藏
- 关注
原创 lua元表
lua元表(metatable)规则1:lua每个值都有元表(metatable)2:table和userdata这两种类型的值,用户可以定制独立的元表。3:lua中除了table和userdata类型的其它类型的值,共享该类型所属的一个元表。实际上lua只为标准字符串库的值设置了元表,其它类型的值默认元表为nil。 co = coroutine.create(function
2017-04-05 19:31:52 335
原创 error 、 assert、xpcall
xpcall接受两个参数:调用函数、错误处理函数。当错误发生时,Lua会在栈释放以前调用错误处理函数,因此可以使用debug库收集错误相关信息。有两个常用的debug处理函数:debug.debug和debug.traceback,前者给出Lua的提示符,你可以自己动手察看错误发生时的情况;后者通过traceback创建更多的错误信息,也是控制台解释器用来构建错误信息的函数。你可以在任何时候调用d
2017-04-04 20:59:59 311
原创 pcall
如果在Lua中需要处理错误,需要使用pcall函数封装你的代码。假定你想运行一段Lua代码,这段代码运行过程中可以捕捉所有的异常和错误。第一步:将这段代码封装在一个函数内function foo () ... if unexpected_condition then error() end ... print(a[i]) -- pot
2017-04-04 20:41:32 889
原创 lua函数
1:形参的使用与C函数的形参使用有点区别;在lua中可以修改形参的值,如下function func(n)n = n or 1count = count + nend2:lua函数支持多重返回值,lua程序设计第二版53页有一句话:只有当一个函数调用是一系列表达式中的最后一个元素(或仅有一个元素)时,才能获得它的所有返回值。另外一种情况是:可以使用圆括号强制使函数调用只返回一个
2017-04-04 12:37:25 438
原创 lua 于c 交互的虚拟栈
1:lua_push* 压栈APIlua_push*这些API是把C语言里面的值封装成Lua类型的值压入栈中的,对于那些需要垃圾回收的元素,在压入栈时,都会在Lua(也就是Lua虚拟机中)生成一个副本。比如lua_pushstring(lua_State *L, const char *s)会向中栈压入由s指向的以'\0'结尾的字符串,在C中调用这个函数后,我们可以任意释放或修改由s指
2017-04-01 21:57:54 944
原创 lua C API
1:lua_pcall vs lua_call and lua_cpcall与lua_call相对应的是lua_pcall函数,lua_pcall会以保护模式调用栈中的函数。以保护模式调用意思是,当被调用的函数发生任何错误时,该错误不会传播,不像lua_call会把错误传递到上一层,lua_pcall所调用的栈中函数发送错误时,lua_pcall会捕捉这个错误,并向栈中压入一个错
2017-04-01 14:22:12 797
原创 lua5.1学习笔记(二)
一:__tostring函数能将各种类型的值表示为一种简单的文本格式,函数print总是调用其实参的__tostring来格式化其输出,__tostring会检查该值是否有一个__tostring的元方法。local mt = {}mt.__tostring = function( tbl )local tmp = {}for k in pairs(tbl) dotmp[#tm
2017-02-11 09:26:17 407
原创 lua注册表和引用系统,LUA_REGISTRYINDEX、luaL_ref、luaL_unref的用途
先看两段代码1: Foo.luafunction foo() print("hello world")end2:luaRef.cpp#include #include #include #include int main(){ lua_State *L = luaL_newstate(); lua
2016-11-07 23:22:24 10775
原创 再看lua协同程序的lua_yield、coroutine.yield、和lua_resume的应用
1:lua_resume_yield.cpp程序#include #include #include #include static int Stop(lua_State* L);lua_State* CreateCoroutine(lua_State* gL, const char* corName);int main(){
2016-11-07 21:51:36 3883
原创 lua的 repeat ..... until
1:先看一个小程序的运行结果 a = 1repeat print("value a:", a) a = a + 1 until( a > 5 )[root@localhost testLua]# lua repeat-until.luavalue a: 1value a: 2value a: 3valu
2016-11-07 12:55:56 518
原创 lua5.1学习笔记(一)
一: lua协同程序1 : 关于coroutine.resume(co, ...)和coroutine.yield(xxx)两个函数的参数和返回值1.1: 如果coroutine.resume(co, ...)调用失败。print(coroutine.resume(co, ...)) 打印 false;如果是第一次调用resume,除了第一个参数以外,resume调用的其余参数值都视
2016-11-06 14:34:07 1038
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人