lua-5.1 和 lua-5.2 之间的一些差异。
2012-06-17 11:39
459 查看
1. luaL_register 2 luaL_setfuncs
lua5.1 之中有一个luaL_register,用于把luaL_Reg 数组中的所有函数注册到lua中。但在lua5.2中已经不支持这一函数了,lua5.2的手册中建议使用luaL_setfuncs来替代luaL_register.
使用如下。
int luaopen_libname(lua_State *L) { static const luaL_Reg funcs[] = { {"func1", func1}, {"func2", func2}, {NULL, NULL} }; #ifdef lua5.1 //5.1 下直接使用luaL_register 就好 luaL_register(L, "libname", funcs); #else //lua5.2 lua_newtable(L); //先把一个table压入VS,然后在调用luaL_setfuncs就会把所以的func存到table中 //注意不像luaL_register这个table是个无名table,可以在的使用只用一个变量来存入这个table。 //e.g local clib = require "libname". 这样就不会污染全局环境。比luaL_register更好。 luaL_setfuncs(L, funcs, 0); #endif return 1; //返回table }
luaL_register, 和 luaL_setfunc 实现很想,这不过luaL_register会先创建一个全局table在把函数注册到这个table中。
具体实现请参考lua源马。
2. LUA_GLOBALINDEX 2 registry LUA_RIDX_GLOBAS
在5.1中经常会把一些C函数注册在LUA_GLOBALINDEX 全局table中。e.g.
lua_pushstring(L, name)
lua_pushcfunction(L, func)
lua_settable(L, LUA_GLOBALSINDEX);
在5.2中已经移除了LUA_GLOBALSINDEX,去而带之的是注册表。
在5.1中lua_setglobal() 和 lua_getgloba() 都用是LUA_GLOBALINDEX 伪索引。
在5.2中上面两个函数都是使用的注册标中的LUA_RIDX_GLOBAS伪索引(索引注册表的全局环境)
LUA_RIDX_GLOBAS是LUA state 注册表中与定义的两个值之一。另一个是
LUA_RIDX_MAINTHREAD 索引的是lua state的主线程状态。
3. luaL_getn 2 lua_objlen 2 lua_rawlen
5.0->5.1->5.2都是得到一个table的大小和#table的值相等,或一个userdata (lua 为指定的userdata分配的原始内存大小,或一个string的长度。
都与其他类型,返回0
还没有写完。。。有时间补充
相关文章推荐
- lua-5.1 和 lua-5.2 之间的一些差异
- lua-5.1 和 lua-5.2 之间的一些差异。
- lua批量编译目前支持5.2,5.1
- 【Lua】将Lua5.1的setfenv迁移到Lua5.2的_ENV
- lua5.2 可能会遇到的一些错误
- 【Java与C++之间的一些差异】之 方法重载
- C# Debug与release之间的一些小差异
- lua 5.1 ==> 5.2
- lua批量编译目前支持5.2,5.1
- c和lua进行的一些基础交互和处理,这里留用lua5.1
- C#和java之间的一些差异与共性
- Lua BitOp 提供5.1和5.2版本位操作运算 (跨平台C语言实现 说明部分1)
- 不同浏览器之间的一些差异整理(持续更新ing)
- 【笔记】学校项目开发中所了解的一些浏览器之间的差异
- lua for通过循环table一些差异
- Lua5.2 一些性能测评
- lua5.1 到 5.3的一些经常会接触到的改动
- 论中西方文化之间的差异
- 决策树中信息增益最大找的是样本之间差异最大的特征
- win64bit安装oracle 10g版本检查未通过解决 提示要求的结果: 5.0,5.1,5.2,6.0 之一 实际结果: 6.1