Lua5.2改动
来源:互联网 发布:c语言位运算优先级 编辑:程序博客网 时间:2024/05/29 07:24
- 第三方cmodule,如使用luaL_register需要改为 luaL_newlib。如lfs库luaL_register (L, "lfs", fslib) 改为luaL_newlib(L,fslib);。
这里本来第二个参数是表明,非nil是把所有接口放到一个全局变量table中,nil就是所有接口都是全局函数。现在是强制取消全局接口了。 - 所有第三方库没有gloable的函数了,所以使用时都要赋给一个表。如lfs, local lfs = require"lfs"。
- 以前thread, function, userdata可以有env。现在没有了。
- getfenv、setfenv没了,只能使用_ENV,不能完全替代。比如给不同func加env不行了,以前可以传入不同函数,用setfenv给他们加上相同env的。
http://blog.codingnow.com/2011/12/lua_52_env.html
模拟实现版本
setfenv = setfenv or function(f, t)
f = (type(f) == 'function' and f or debug.getinfo(f + 1, 'f').func)
local name
local up = 0
repeat
up = up + 1
name = debug.getupvalue(f, up)
until name == '_ENV' or name == nil
if name then
debug.upvaluejoin(f, up, function() return name end, 1) -- use unique upvalue
debug.setupvalue(f, up, t)
end
end - userdata用lua_getuservalue代替lua_setfenv。
- local ss = "aa/bb/cc" ss:gsub('/', '%.') 5.1能运行,5.2必须把%去掉。
- table.maxn下个版本要去掉了
- lua_objlen ->lua_rawlen
- module (name [, ···]) deprecated,坏处1 坏处2:1.
使用package.seeall会破坏模块内聚性,有可能随意访问或改变全局变量。2.直接把包以指定名字(可以AA.BB.CC的名字)加到了全局表。
module("mymodule")等同于:
原来的local modname = “mymodule” – 定义模块名
local M = {} -- 定义用于返回的模块表
_G[modname] = M -- 将模块表加入到全局变量中
package.loaded[modname] = M -- 将模块表加入到package.loaded中,防止多次加载
setfenv(1,M) -- 将模块表设置为函数的环境表,这使得模块中的所有操作是以在模块表中的,这样定义函数就直接定义在模块表中
新的方式:
local base = _ENV
local modname = {}
local _ENV = modname
...
return modname - local socket = require("socket.core")
module("socket")
如luasocket这样的定义在5.1中,socket是 socket.core返回的table加上本module内定义的接口。
5.2中设置了兼容,能用module,但是socket.core中的table直接被空table覆盖,不会暴露。 #define LUA_GLOBALSINDEX LUA_RIDX_GLOBALS
#define luaL_reg luaL_Reg
#define luaL_putchar(B,c) luaL_addchar(B,c)
#define lua_open luaL_newstateluaL_typerror没了,改为
LUALIB_API int luaL_typerror (lua_State *L, int narg, const char *tname) {
const char *msg = lua_pushfstring(L, "%s expected, got %s",
tname, luaL_typename(L, narg));
return luaL_argerror(L, narg, msg);
}- luaL_openlib(L, NULL, func, 0); => luaL_setfuncs(L, func, 0);
原文地址:http://blog.csdn.net/lqk1985/article/details/7380679
0 0
- lua5.2 改动
- lua5.2 改动
- Lua5.2改动
- Lua5.2改动
- lua5.2 tips
- Lua5.2源代码解析
- lua5.2模块注册
- lua5.1 到 5.3的一些经常会接触到的改动
- lua5.2 调用lua函数
- 翻译lua5.2的参考手册
- lua5.2下使用lua_tinker
- linux lua5.2链接问题
- ubuntu 链接 Lua5.2 报错
- 探索Lua5.2内部实现:TString
- 轻松升级lua_tinker支持lua5.2
- 修改lua_tinker以支持lua5.2
- 探索Lua5.2内部实现:Garbage Collection
- Lua环境搭建编译[Lua5.2+VS2010]
- Java Web应用目录结构
- 读取matlab某个路径下的“.mat”文件,改变文件中的内容,并以原名字,变量保存
- intent
- OI本月刷水记录
- 搜索框制作
- Lua5.2改动
- UVa 12174:Shuffle(滑动窗口)
- 《乌合之众》深度分析日本这个失败的产品
- 判断文件夹是否存在,不存在创建文件夹
- Android-补间动画基本使用(位移、缩放、旋转、透明)
- UVa 10943 - How do you add?(组合数)
- Java JVM(五):JDK8 新特性
- 黑马程序员——java基础——IO流
- 双链表的建立、求长、定位、插入、删除、输出和释放