让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 ...
随机推荐
- Android学习探索之Java 8 在Android 开发中的应用
前言: Java 8推出已经将近2年多了,引入很多革命性变化,加入了函数式编程的特征,使基于行为的编程成为可能,同时减化了各种设计模式的实现方式,是Java有史以来最重要的更新.但是Android上, ...
- php报错 ----> Call to undefined function imagecreatetruecolor()
刚才在写验证码的时候,发现报错,然后排查分析了一下,原来是所用的php版本(PHP/5.3.13)没有开启此扩展功能. 进入php.ini 找到extension=php_gd2.dll ,将其前面的 ...
- 2016/12/30_Python
今天主要学习内容: Python: 1.字典的使用 1)怎么创建字典 dicts = {"name":"juncx","age":17} d ...
- Windows下MySQL无法启动
问题描述: 从网上下了5.7 的MySQL,在bin目录下执行 start mysqld ,弹出个cmd窗口一闪就没了,也看不清是什么报错.mysqld --install安装了服务,也启动不了. ...
- DB2重启数据库实例
DB2重启数据库实例时,有时停止实例会失败,此时需要先确认没有应用链接数据库,然后再关闭数据库实例,并重新启动. 1.查看是否有活动的链接 命令:db2 list applications for d ...
- 大数据之Yarn——Capacity调度器概念以及配置
试想一下,你现在所在的公司有一个hadoop的集群.但是A项目组经常做一些定时的BI报表,B项目组则经常使用一些软件做一些临时需求.那么他们肯定会遇到同时提交任务的场景,这个时候到底如何分配资源满足这 ...
- oracle常用的快捷键
最近在开发过程中,遇到一些麻烦,就是开发效率问题,有时候其他同事使用PLSQL 编程效率明显高于自己,观察了好久,才发现他使用PLSQL 已经很长时间了而且,他自己也在其中添加了好多快捷方式, 1.登 ...
- 2DToolkit官方文档中文版打地鼠教程(二):设置摄像机
这是2DToolkit官方文档中 Whack a Mole 打地鼠教程的译文,为了减少文中过多重复操作的翻译,以及一些无必要的句子,这里我假设你有Unity的基础知识(例如了解如何新建Sprite等) ...
- 《开源博客Q群》和《NET上海Q群》入群须知
开源博客Q群 群名:<嗨-博客> 群号:469075305(已满) 491585006(New) 群简介:“我们每个猿都有一个搭建自己独立博客的梦”. 入群要求: 您可以是HR,私聊管理员 ...
- 【JavaScript吉光片羽】--- 滑动条
灯光的亮度控制需要一个滑动条,先借用lamp源码中Bar: var Bar = function (opt) { var defaults = { $id: "", // 进度条d ...