Chinaunix首页 | 论坛 | 博客
  • 博客访问: 870022
  • 博文数量: 322
  • 博客积分: 6688
  • 博客等级: 准将
  • 技术积分: 3626
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-19 11:26
文章分类

全部博文(322)

文章存档

2013年(5)

2012年(66)

2011年(87)

2010年(164)

分类: LINUX

2012-05-06 14:46:40

新模块系统,增量垃圾收集,varargs新机制,多行字符串或引用的新语法,#和%新操作符, metatable支持所有类型,使用luaconf.h来配置lua暂时避免版本冲突,完善的reentrant parser。Pil第二版包括了5.1的新内容,增加了新例子,对新模块系统,多状态和垃圾收集的详细阐述。
语法:
  1. 函数传递可变参数用...来代替局部arg表。不使用...时,arg用法和旧版本一样;但使用...后(无论先后),局部arg都会变成nil。
  2. 在repeat.until里,局部变量的生命周期覆盖到until条件后面;
  3. 多行字符串或引用的新语法使用多层匹配代替以前的嵌套;
  4. #和%新操作符。

库函数:
  • string.gfind改为string.gmatch;
  • 如果调用string.gsub的第3个参数是个函数,如果函数返回假,替换字符将保持原配而不是旧版的空串;
  • table.setn废弃,table.getn改为使用#;
  • loadlib改为package.loadlib;
  • math.mod改为math.fmod;
  • table.foreach和table.foreachi作废。可用for循环pairs或ipairs代替;
  • require从package.path而不是LUA_PATH得到path值;
  • collectgarbage (opt [, arg])参数从[limit]改为更多选择,gcinfo废弃改为collectgarbage("count");
  • string.byte (s [, i [, j]])返回s串从i到j的数值。旧版只支持2个参数
  • string.match (s, pattern [, init])从init匹配或捕获值返回。旧版没有这个函数。
  • string.reverse (s)把s倒转。旧版没有这个函数。
  • module (name [, ···])创建一个模块。旧版没有这个函数。

C API:
5.1版本增加了以luaL_开头的辅助库Auxiliary Library;
luaL_getn改为lua_objlen,luaL_setn废弃;
luaL_openlib改为luaL_register;
luaL_checkudata改为抛出异常而不是返回NULL。
luaopen_* functions不能直接调用,改为像调用其它普通c函数一样的过程;
lua_open改为lua_newstate,可以设置内存分配方法。luaL_newstate默认使用realloc分配方法;

5.0的调用方法:
lua_State *L = lua_open();
luaopen_base(L);
luaopen_string(L);
luaopen_math(L);

5.1的调用方法:
lua_State *L = luaL_newstate();
lua_cpcall(L, luaopen_base, 0);
lua_cpcall(L, luaopen_io, 0);
lua_cpcall(L, luaopen_math, 0);
lua_cpcall(L, luaopen_string, 0);
lua_pushcfunction(L, luaopen_*);lua_call();等价于lua_cpcall(L, luaopen_*, 0); 
阅读(1450) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~