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