lua 文件编译相关工具
-- 编译一个代码文件
-- loadfile (lua_State *L, const char *filename);
-- 将一个文件加载为lua代码块,仅编译不执行,返回值为编译后的
-- 代码块函数和错误信息。
function COMPILE(file)
local fun, err = loadfile(file);
return fun;
end -- 编译并运行一个代码文件
function LOAD_RUN(file)
return require(file);
end -- 载入一个目录下的所有代码文件(list.lua指明了有哪些文件)
function LOAD_PATH(path)
-- 取得list.lua的地址
local listPath = path .. "/" .. "list"; -- 加载list,需要加载的所有文件名字
local fileNames = LOAD_RUN(listPath); -- 进行加载
local file = {};
for i = , #fileNames do
local bin = path .. "/" .. fileNames[i];
file[fileNames[i]] = LOAD_RUN(bin);
end
return file;
end -- 卸载目录下的所有文件
function UNLOAD_PATH(path)
local listPath = path .. "/" .. "list";
local fileNames = LOAD_RUN(listPath);
local file = {};
for i = , #fileNames do
-- 设置已经被加载的fileNames[i]为空
package.loaded[path .. "/" .. fileNames[i]] = nil;
end -- 回收内存("collect"做一次完整的垃圾收集循环)
collectgarbage("collect");
end -- 重新载入某个文件
function update(file)
local pos = string.find(file,"[^%/.]*$");
local module_name = string.sub(file, pos);
local mod = package.loaded[module_name];
if not mod then
mod = package.loaded[module_name.."M"];
end -- 若该文件为模块,且存在 destruct 方法,则先调用析构方法,再重新加载
if type(mod) == "table" and type(mod.destruct) == "function" then
mod.destruct();
end package.loaded[file] = false;
local ret = require(file); mod = package.loaded[module_name];
if not mod then
mod = package.loaded[module_name.."M"];
end -- 若该文件为模块,且存在 destruct 方法,则先调用析构方法,再重新加载
if type(mod) == "table" and type(mod.init) == "function" then
mod.init();
end -- 回收垃圾
-- 无须开启 gc,否则会导致客户端启动速度变慢,见 SLIMEC-7396
--collectgarbage("collect");
return ret;
end -- 使用代码更新指定文件
function updateByScript(file, script)
local pos = string.find(file,"[^%/.]*$");
local module_name = string.sub(file, pos);
local mod = package.loaded[module_name];
if not mod then
mod = package.loaded[module_name.."M"];
end -- 若该文件为模块,且存在 destruct 方法,则先调用析构方法,再重新加载
if type(mod) == "table" and type(mod.destruct) == "function" then
mod.destruct();
end
package.loaded[file] = false; -- 载入
local ret = loadstring(script)(); -- 若该文件为模块,且存在 destruct 方法,则先调用析构方法,再重新加载
mod = package.loaded[module_name];
if not mod then
mod = package.loaded[module_name.."M"];
end if type(mod) == "table" and type(mod.init) == "function" then
mod.init();
end -- 回收垃圾
--collectgarbage("collect"); return ret;
end -- 重新载入一个目录下的所有代码文件(list.lua指明了有哪些文件)
function RRLOAD_PATH(path)
local listPath = path .. "/" .. "list";
local fileNames = LOAD_RUN(listPath);
local file = {};
for i = , #fileNames do
package.loaded[path .. "/" .. fileNames[i]] = nil;
local bin = update(path .. "/" .. fileNames[i]);
file[fileNames[i]] = bin;
end
return file;
end
complier
lua 文件编译相关工具的更多相关文章
- LUA的编译、环境等
Lua的环境.编译等 Lua命令行 lua命令行选项: -i:进入交互式 -e:执行lua代码 -l:加载库文件 例如使用下面的命令启动lua解释器,可以重新定义lua提示符. lua -i -e & ...
- Cocos2d-x使用Luajit将Lua脚本编译成bytecode,启用加密
http://www.cocoachina.com/bbs/read.php?tid=205802 lua脚本进行加密,查了一下相关的资料 ,得知lua本身能够使用luac将脚本编译为字节码(byte ...
- 修改Unity中Lua文件的默认打开程序
项目中引用了XLua,而Lua文件又是以txt文件结尾的,当修改系统的扩展脚本编辑器为vs后双击lua文件(xx.txt)默认也使用vs打开了,无提示的黑白文本编辑 昨办? -. 后来看到网上有写Un ...
- Lua------------------改善Unity编辑器对Lua文件的支持
原创 2017年03月10日 18:44:22 标签: Unity / lua / 编辑器 952 当前版本的Unity(截至Unity5.5.x)中TextAsset类不支持后缀为lua的文件,将l ...
- linux 进阶2--C++读取lua文件中的变量、一维表、二维表
lua 语言非常灵活,一般把lua 作为脚本文件,会用C++与之进行交互.最重要的是C++代码能读取到脚本中的变量.一维表.二维表. 这样有些参数就可以在lua文件进行更改,而不用重新更改C++代码. ...
- Cocos2d-x使用Luajit将Lua脚本编译为bytecode,从而实现加密
转自:http://www.58player.com/blog-2537-87218.html 项目要求对lua脚本进行加密,查了一下相关的资料 ,得知lua本身可以使用luac将脚本编译为字节码(b ...
- Cocos2d-x使用Luajit将Lua脚本编译为bytecode,实现加密 更新
项目要求对lua脚本进行加密,查了一下相关的资料 ,得知lua本身能够使用luac将脚本编译为字节码(bytecode)从而实现加密,试了一下,确实可行. 以下是使用原生的lua解释器编译字节码: 1 ...
- lua文件修改为二进制文件
注意:lua编译跟luajit编译的二进制文件是不兼容,不能运行的 如果是使用luajit,请直接使用luajit直接编译二进制 第一种:luajit编译(以openresty为例,跟luac是相反的 ...
- Ubuntu的多文件编译以及c语言的数组、函数
闲言少叙,直接切入主题. 一.Linux下的多文件编译(Ubuntu系统). 对于小程序来说,往往一个.c文件就足够了,里面包含了各种主函数和功能函数,以及函数的声明等等.但是这样的弊端主要有两点,一 ...
随机推荐
- git add . 提示 `Changes not staged for commit`
- mysql并发控制之快照读和当前读
上一篇简单的介绍了下MVCC(多版本并发控制)的原理,MVCC会对事物内操作的数据做多版本控制,从而实现并发环境下事物对数据写操作的阻塞不影响读操作的性能.而这个多版本控制的实现是由undo log来 ...
- 获取iframe 内容
parent.$.find("iframe")[0].contentWindow.getvalue(); h.find("iframe")[0].content ...
- 【模板】最长公共子序列(LCS)。
看过好多人的博客,感觉要么是太复杂要么就是太不容易理解. 那就亲自动手写一个通俗易懂的. 先定义两个数组,第一个数组为主,用第二个数组来匹配第一个,看能有多少可以对应上的. 所以,其实第一个数组的内容 ...
- word20170104办签证 Visa application有用的词和句子
有用的词:visa category: 签证类型tourist visa: 旅游签证visa interview: 签证面试multiple entries: 多次往返visa on arrival: ...
- 428 Setup MySQL + - 改
初步认识MySQL 安装 练习增减改 1.什么是数据库软件: 数据库,俗称数据的仓库.方便管理数据的软件(或程序) 市面上数据库软件: Oracle:甲骨文公司产品.当前最流行应用最广泛数据库软件.和 ...
- 深度学习之自编码器AutoEncoder
原文地址:https://blog.csdn.net/marsjhao/article/details/73480859 一.什么是自编码器(Autoencoder) 自动编码器是一种数据的压缩算法, ...
- 移动端右侧导航 显示隐藏js
transform与fixed影响 html按钮 <span class="nav-btn"></span> <span class="cl ...
- java - day007 - 继承(2), 多态,面向对象,抽象类
继承 新建子类对象是,先新建父类对象,并执行父类的构造方法, 默认执行父类的无参构造放方法 可以 手动调用父类的有参构造 super(参数 ) super super.xxx() 调用父类成员 一般重 ...
- spring+myBatis 配置多数据源,切换数据源
注:本文来源于 tianzhiwuqis <spring+myBatis 配置多数据源,切换数据源> 一个项目里一般情况下只会使用到一个数据库,但有的需求是要显示其他数据库的内容,像这样 ...