-- 编译一个代码文件
-- 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. Mongodb复杂查询,总结

    内嵌文档复杂查询 数据结构 { "_id":"1412243", "info":{ "data":[ { "b ...

  2. python3 练手实例3 摄氏温度与华氏温度转换

    def wd(): w=input('请输入一个摄氏温度或者一个华氏温度,如,34c/C or 34f/F:') if w[-1] in ['c','C']: w=float(w[:-1]) hs=1 ...

  3. java(11)带参数的方法

    一.java中的包(package) 1.1 包,对应到磁盘中的文件夹 1.2 新建一个class,默认保存在缺省包中 1.3 声明包的关键字:package package语句,置顶位置 1.4 导 ...

  4. 关于接口(Interface)

    接口,其实是指类之间约定的协议,可以包含方法.属性.事件和索引: 接口成员不允许使用访问修饰符号(public.private.protected.internal),所有的接口成员都是公共的. 接口 ...

  5. Virtualbox Ubuntu 虚拟机命令行挂载共享文件夹及设置静态IP

    挂载共享文件夹 参考 [1], VirtualBox/GuestAdditions [2], VirtualBox/SharedFolders 步骤 在Virtualbox 虚拟机的菜单『设备』中,点 ...

  6. 找出链表中倒数第K个结点

    思路:两个指针,也是快指针和慢指针,先让快指针走k -1步,这时慢指针开始和快指针一起走到尾部.慢指针停止的点就是倒数第k个节点. public static ListNode findCountDo ...

  7. 初识springboot(傻瓜式教程)

    初识springboot(傻瓜式教程) 项目所需的版本 IDEA 2018 maven 3.x jdk-1.8 IDEA创建spring-boot项目(maven方法) 1.创建一个maven工程 点 ...

  8. day 20 - 1 序列化模块,模块的导入

    序列化模块 首先我们来看一个序列:'sdfs45sfsgerg4454287789sfsf&*0' 序列 —— 就是字符串序列化 —— 从数据类型 --> 字符串的过程反序列化 —— 从 ...

  9. 搭建企业git代码版本管理所需工具

    此片文章纯属记录一下使用gitlab搭建私有git版本管理的一些工具及概念. 先记录一下概念 git         是一种版本控制系统,是一个命令,是一种工具 github   是一个基于git实现 ...

  10. Mac环境下Vagrant的安装

    1.安装Vagrant 下载地址:https://www.vagrantup.com/downloads.html 下载好pkg包后,点击安装即可. 2.安装 VirtualBox 下载地址:http ...