自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

leisure

记录自己的一些编程足迹

  • 博客(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 293

原创 error 、 assert、xpcall

xpcall接受两个参数:调用函数、错误处理函数。当错误发生时,Lua会在栈释放以前调用错误处理函数,因此可以使用debug库收集错误相关信息。有两个常用的debug处理函数:debug.debug和debug.traceback,前者给出Lua的提示符,你可以自己动手察看错误发生时的情况;后者通过traceback创建更多的错误信息,也是控制台解释器用来构建错误信息的函数。你可以在任何时候调用d

2017-04-04 20:59:59 279

原创 pcall

如果在Lua中需要处理错误,需要使用pcall函数封装你的代码。假定你想运行一段Lua代码,这段代码运行过程中可以捕捉所有的异常和错误。第一步:将这段代码封装在一个函数内function foo ()    ...    if unexpected_condition then error() end    ...    print(a[i])   -- pot

2017-04-04 20:41:32 843

原创 lua函数

1:形参的使用与C函数的形参使用有点区别;在lua中可以修改形参的值,如下function func(n)n = n or 1count = count + nend2:lua函数支持多重返回值,lua程序设计第二版53页有一句话:只有当一个函数调用是一系列表达式中的最后一个元素(或仅有一个元素)时,才能获得它的所有返回值。另外一种情况是:可以使用圆括号强制使函数调用只返回一个

2017-04-04 12:37:25 414

原创 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 917

原创 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 747

原创 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 385

原创 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 10574

原创 再看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 3833

原创 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 496

原创 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 1005

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除