让Lua自己把文件夹下面的所有文件自动加载起来吧
没有想到我也做了一回标题党。其实这里边说的自动还是有夸大其词的部分。其实只是指定文件夹,然后根据指定文件夹数据,加载目录下边的内容而已。
怎么来进行Lua文件的加载
一般情况下,相关的功能需要给他创建一个相关的目录,然后直接通过我写的一个组件指定这个目录的加载位置就行了。不同的目录之间需要明确他们的加载顺序。
为什么要这么做?
- 加载的条理性。一般情况下,Lua文件会在需要的时候进行内存加载,这样比较混乱。说比较混乱的原因是没有明确的地方来控制加载的顺序,所以文件加载的顺序比较看脸。
- 加载内容的安全性。这里提到的安全性并不是说的什么高深的东西。而是这个东西究竟有没有加载成功。如果使用了,我所说的加载方式进行加载,文件内容加载只要存在相关的文件夹中就会自动加载,一般不会漏下。
- 明确同一个文件夹下的文件加载顺序。一般情况下init.lua会首先加载,然后加载其他文件。最后加载loadend.lua文件。在编写软件的时候可以根据这些文件的加加载顺序来进行内容加载的顺序控制。
- 实现位置的无关性。配合工厂模式,可以在完全不关心实现位置的情况下,实现相关功能。
- 文件位置的条理性。具体的实现位置可以在不记位置的情况下推理出他应该在什么地方实现。(个人觉得这个非常重要)
实际引用

总结
其实是一个非常简单的功能,但是用处却非常大。可能我不是很会总结这个东西。哈哈。总之分享一下吧
文件
-- local lfs = require("lfs")
local AutoRequire = class("AutoRequire")
local instance = nil
function AutoRequire:getInstance()
return instance
end
function AutoRequire:init(dir)
instance.OriginalPath = dir or lfs.currentdir()
print("instance.OriginalPath", instance.OriginalPath)
end
function AutoRequire:getTag()
return self._tag
end
function AutoRequire:getRequirePath()
return self._require_path
end
function AutoRequire:require(path, data)
local loadpath = self.OriginalPath..'/'..path
assert(lfs.symlinkattributes(loadpath), "Error AutoRequire path not find "..path)
lfs.chdir(loadpath)
self._tag = data
self._require_path = path
local initfile = path..'/'.."init.lua"
if cc.FileUtils:getInstance():isFileExist(initfile) then
-- print("require("..initfile..")")
local loadf = path..'/'.."init"
-- print("require "..loadf)
require(loadf)
end
for file in lfs.dir(loadpath) do
if file ~= "." and file ~= ".." and file ~= "init.lua" and file ~= "loadend.lua" then
local f = loadpath ..'/'..file
local attr = lfs.attributes(f)
local filename = string.gsub(file, ".lua$", "")
if attr.mode == "file" and file ~= filename then
-- print("require("..path..'/'..file..")")
local loadf = path..'/'..filename
-- print("require "..loadf)
require(loadf)
end
end
end
local initfile = path..'/'.."loadend.lua"
if cc.FileUtils:getInstance():isFileExist(initfile) then
-- print("require("..initfile..")")
local loadf = path..'/'.."loadend"
-- print("require "..loadf)
require(loadf)
end
self._tag = nil
self._require_path = nil
lfs.chdir(self.OriginalPath)
end
instance = AutoRequire.new()
cc.exports.AutoRequire = AutoRequire
return AutoRequire
2016-09-30 11:36:10 后记
突然间想起来一个好处,现在补充上来。
一次性加载所有的代码。可以让很多语法错误在启动阶段暴露出来,而不是在真正的运行阶段暴露,这样比较方便。
让Lua自己把文件夹下面的所有文件自动加载起来吧的更多相关文章
- GreenDao 数据库:使用Raw文件夹下的数据库文件以及数据库升级
一.使用Raw文件夹下的数据库文件 在使用GreenDao框架时,数据库和数据表都是根据生成的框架代码来自动创建的,从生成的DaoMaster中的OpenHelper类可以看出: public sta ...
- C# 拷贝指定文件夹下的所有文件及其文件夹到指定目录
要拷贝的文件及其文件夹结构 其中.lab文件不能覆盖 /// <summary> /// 拷贝oldlab的文件到newlab下面 /// </summary> /// < ...
- PHP遍历、删除文件夹中的所有文件
<?php header("Content-type:text/html;charset=utf-8"); /** * getDirFile 遍历文件夹中的所有文件 * @p ...
- php 读取网页源码 , 导出成txt文件, 读取xls,读取文件夹下的所有文件的文件名
<?php // 读取网页源码$curl = curl_init();curl_setopt($curl, CURLOPT_URL, $url);curl_setopt($curl, CURLO ...
- C#实现把指定文件夹下的所有文件复制到指定路径下以及修改指定文件的后缀名
1.实现把指定文件夹下的所有文件复制到指定路径下 public static void copyFiles(string path) { DirectoryInfo dir = new Directo ...
- C/C++不同文件夹下包含头文件的方法及#include的使用
转自:http://blog.sina.com.cn/s/blog_6e0693f70100so42.html 本文主要介绍了如何不同文件夹下使用预处理器指示符#include. 假设我们有如下一个工 ...
- C++读取文件夹中所有的文件或者是特定后缀的文件
由于经常有读取一个文件夹中的很多随机编号的文件,很多时候需要读取某些特定格式的所有文件. 下面的代码可以读取指定文件家中的所有文件和文件夹中格式为jpg的文件 参考: http://www.2cto. ...
- [转]C#中调用资源管理器(Explorer.exe)打开指定文件夹 + 并选中指定文件 + 调用(系统默认的播放类)软件(如WMP)打开(播放歌曲等)文件
原文:http://www.crifan.com/csharp_call_explorer_to_open_destinate_folder_and_select_specific_file/ C#中 ...
- 递归输出文件夹下的所有文件的名称(转自 MSDN)
问题:如何输出给定文件夹目录下面的所有文件的名称? C#代码: using System; using System.IO; namespace MyTest { public class Progr ...
随机推荐
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(76)-微信公众平台开发-网页授权
前言 网页授权是:应用或者网站请求你用你的微信帐号登录,同意之后第三方应用可以获取你的个人信息 网上说了一大堆参数,实际很难理解和猜透,我们以实际的代码来演示比较通俗易懂 配置 实现之前我们必须配置用 ...
- 缓存工厂之Redis缓存
这几天没有按照计划分享技术博文,主要是去医院了,这里一想到在医院经历的种种,我真的有话要说:医院里的医务人员曾经被吹捧为美丽+和蔼+可亲的天使,在经受5天左右相互接触后不得不让感慨:遇见的有些人员在挂 ...
- $ORACLE_HOME变量值末尾多“/”惹的祸
之前一直误以为$ORACLE_HOME变量的路径中末尾多写一个"/"不会有影响. 今天做实验时碰到一个情景,发现并不是这样. 环境:OEL 5.7 + Oracle 10.2.0. ...
- 【绝对干货】仿微信QQ设置图形头像裁剪,让你的App从此炫起来~
最近在做毕业设计,想有一个功能和QQ一样可以裁剪头像并设置圆形头像,额,这是设计狮的一种潮流. 而纵观现在主流的APP,只要有用户系统这个功能,这个需求一般都是在(bu)劫(de)难(bu)逃(xue ...
- VS2015常用快捷键总结
生成解决方案 F6,生成项目Shift+F6 调试执行F5,终止调试执行Shift+F5 执行调试Ctrl+F5 查找下一个F3,查找上一个Shift+F3 附加到进程Ctrl+Alt+P,逐过程F1 ...
- Android Studio-—使用OpenCV的配置方法和demo以及开发过程中遇到的问题解决
前提: 1.安装Android Studio(过程略) 2.官网下载OpenCV for Android 网址:http:opencv.org/downloads.html 我下载的是下图的版本 3. ...
- 分享一个php的启动关闭脚本(原)
自己简单写的一个php服务的启动脚本和大家分享 思路(实现的原理): 1:function模块+case语句多分支判断 2:通过添加# chkconfig: 2345 43 89注释实现开机自启动(前 ...
- tg2015 信息传递 (洛谷p2661)
题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一 ...
- TODO:这是一个我的自媒体
TODO:这是一个我的自媒体 自媒体(外文名:We Media)又称"公民媒体"或"个人媒体",是指私人化.平民化.普泛化.自主化的传播者,以现代化.电子化的手 ...
- Entity Framework 6 Recipes 2nd Edition(11-4)译 -> 在”模型定义”函数里调用另一个”模型定义”函数
11-4.在”模型定义”函数里调用另一个”模型定义”函数 问题 想要用一个”模型定义”函数去实现另一个”模型定义”函数 解决方案 假设我们已有一个公司合伙人关系连同它们的结构模型,如Figure 11 ...