-- 编译一个代码文件
-- 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 文件编译相关工具的更多相关文章

  1. LUA的编译、环境等

    Lua的环境.编译等 Lua命令行 lua命令行选项: -i:进入交互式 -e:执行lua代码 -l:加载库文件 例如使用下面的命令启动lua解释器,可以重新定义lua提示符. lua -i -e & ...

  2. Cocos2d-x使用Luajit将Lua脚本编译成bytecode,启用加密

    http://www.cocoachina.com/bbs/read.php?tid=205802 lua脚本进行加密,查了一下相关的资料 ,得知lua本身能够使用luac将脚本编译为字节码(byte ...

  3. 修改Unity中Lua文件的默认打开程序

    项目中引用了XLua,而Lua文件又是以txt文件结尾的,当修改系统的扩展脚本编辑器为vs后双击lua文件(xx.txt)默认也使用vs打开了,无提示的黑白文本编辑 昨办? -. 后来看到网上有写Un ...

  4. Lua------------------改善Unity编辑器对Lua文件的支持

    原创 2017年03月10日 18:44:22 标签: Unity / lua / 编辑器 952 当前版本的Unity(截至Unity5.5.x)中TextAsset类不支持后缀为lua的文件,将l ...

  5. linux 进阶2--C++读取lua文件中的变量、一维表、二维表

    lua 语言非常灵活,一般把lua 作为脚本文件,会用C++与之进行交互.最重要的是C++代码能读取到脚本中的变量.一维表.二维表. 这样有些参数就可以在lua文件进行更改,而不用重新更改C++代码. ...

  6. Cocos2d-x使用Luajit将Lua脚本编译为bytecode,从而实现加密

    转自:http://www.58player.com/blog-2537-87218.html 项目要求对lua脚本进行加密,查了一下相关的资料 ,得知lua本身可以使用luac将脚本编译为字节码(b ...

  7. Cocos2d-x使用Luajit将Lua脚本编译为bytecode,实现加密 更新

    项目要求对lua脚本进行加密,查了一下相关的资料 ,得知lua本身能够使用luac将脚本编译为字节码(bytecode)从而实现加密,试了一下,确实可行. 以下是使用原生的lua解释器编译字节码: 1 ...

  8. lua文件修改为二进制文件

    注意:lua编译跟luajit编译的二进制文件是不兼容,不能运行的 如果是使用luajit,请直接使用luajit直接编译二进制 第一种:luajit编译(以openresty为例,跟luac是相反的 ...

  9. Ubuntu的多文件编译以及c语言的数组、函数

    闲言少叙,直接切入主题. 一.Linux下的多文件编译(Ubuntu系统). 对于小程序来说,往往一个.c文件就足够了,里面包含了各种主函数和功能函数,以及函数的声明等等.但是这样的弊端主要有两点,一 ...

随机推荐

  1. python3 练手实例5 做一个简单电子时钟

    import time,sys,os while(1): t = time.strftime('%Y-%m-%d\n%H:%M:%S',time.localtime(time.time())) pri ...

  2. EF提交插入数据catch捕获具体异常方法

    try { db.SaveChanges(); } catch (DbEntityValidationException ex) { StringBuilder errors = new String ...

  3. Linux环境安装jdk12-rpm

    此博客只是本人的个人学习记录,若有什么误导观看者,请不要怪我... 1.环境准备: Linux环境:Centos7 jdk版本:JavaSE12      下载地址:https://www.oracl ...

  4. c++ 常用头文件

    1.#include<iostream> iostream 的意思是输入输出流.#include<iostream>是标准的C++头文件,任何符合标准的C++开发环境都有这个头 ...

  5. 秋名山老司机(BS4与正则的比拼)

    因为嘉伟思杯里的一个脚本题目,16进制计算,python3正则还没学,所以没写出来.大佬跟我说也可以用BS4,从DOM上下手,直接爬下来直接一个eval就搞定了,eval可以像这样计算16进制,eva ...

  6. 如何在submit上运行php文件

    一..把php加入到环境变量 二.在sublmie中新建编译系统 三.添加一下代码,修改成php当前的目录地址,保存在默认的路径下,命名为php.sublime-build { "cmd&q ...

  7. 使用scrapy爬虫,爬取今日头条搜索吉林疫苗新闻(scrapy+selenium+PhantomJS)

    这一阵子吉林疫苗案,备受大家关注,索性使用爬虫来爬取今日头条搜索吉林疫苗的新闻 依然使用三件套(scrapy+selenium+PhantomJS)来爬取新闻 以下是搜索页面,得到吉林疫苗的搜索信息, ...

  8. SQL Server 数据库限制单用户使用和解除单用户使用

    一个在单用户(SINGLE_USER)模式下的数据库一次只能有一个连接.在限制用户(RESTRICTED_USER)模式下的数据库只能接受被认为是“合格”用户的连接——这些用户属于dbcreator或 ...

  9. phpredis扩展实现LBS距离计算和范围筛选

    来源 public function geo(){ $redis = new \redis(); $redis -> connect('127.0.0.1',6379); //位置增加 $res ...

  10. datatable 给某一列添加title属性

    简单描述:采用datatable拼接的表格,没有title属性,嗯就是这个情况,直接上代码 代码: //js代码$("#toAdd").click("click" ...