没有想到我也做了一回标题党。其实这里边说的自动还是有夸大其词的部分。其实只是指定文件夹,然后根据指定文件夹数据,加载目录下边的内容而已。

怎么来进行Lua文件的加载

一般情况下,相关的功能需要给他创建一个相关的目录,然后直接通过我写的一个组件指定这个目录的加载位置就行了。不同的目录之间需要明确他们的加载顺序。

为什么要这么做?

  1. 加载的条理性。一般情况下,Lua文件会在需要的时候进行内存加载,这样比较混乱。说比较混乱的原因是没有明确的地方来控制加载的顺序,所以文件加载的顺序比较看脸。
  2. 加载内容的安全性。这里提到的安全性并不是说的什么高深的东西。而是这个东西究竟有没有加载成功。如果使用了,我所说的加载方式进行加载,文件内容加载只要存在相关的文件夹中就会自动加载,一般不会漏下。
  3. 明确同一个文件夹下的文件加载顺序。一般情况下init.lua会首先加载,然后加载其他文件。最后加载loadend.lua文件。在编写软件的时候可以根据这些文件的加加载顺序来进行内容加载的顺序控制。
  4. 实现位置的无关性。配合工厂模式,可以在完全不关心实现位置的情况下,实现相关功能。
  5. 文件位置的条理性。具体的实现位置可以在不记位置的情况下推理出他应该在什么地方实现。(个人觉得这个非常重要)

实际引用

总结

其实是一个非常简单的功能,但是用处却非常大。可能我不是很会总结这个东西。哈哈。总之分享一下吧

文件

-- 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自己把文件夹下面的所有文件自动加载起来吧的更多相关文章

  1. GreenDao 数据库:使用Raw文件夹下的数据库文件以及数据库升级

    一.使用Raw文件夹下的数据库文件 在使用GreenDao框架时,数据库和数据表都是根据生成的框架代码来自动创建的,从生成的DaoMaster中的OpenHelper类可以看出: public sta ...

  2. C# 拷贝指定文件夹下的所有文件及其文件夹到指定目录

    要拷贝的文件及其文件夹结构 其中.lab文件不能覆盖 /// <summary> /// 拷贝oldlab的文件到newlab下面 /// </summary> /// < ...

  3. PHP遍历、删除文件夹中的所有文件

    <?php header("Content-type:text/html;charset=utf-8"); /** * getDirFile 遍历文件夹中的所有文件 * @p ...

  4. php 读取网页源码 , 导出成txt文件, 读取xls,读取文件夹下的所有文件的文件名

    <?php // 读取网页源码$curl = curl_init();curl_setopt($curl, CURLOPT_URL, $url);curl_setopt($curl, CURLO ...

  5. C#实现把指定文件夹下的所有文件复制到指定路径下以及修改指定文件的后缀名

    1.实现把指定文件夹下的所有文件复制到指定路径下 public static void copyFiles(string path) { DirectoryInfo dir = new Directo ...

  6. C/C++不同文件夹下包含头文件的方法及#include的使用

    转自:http://blog.sina.com.cn/s/blog_6e0693f70100so42.html 本文主要介绍了如何不同文件夹下使用预处理器指示符#include. 假设我们有如下一个工 ...

  7. C++读取文件夹中所有的文件或者是特定后缀的文件

    由于经常有读取一个文件夹中的很多随机编号的文件,很多时候需要读取某些特定格式的所有文件. 下面的代码可以读取指定文件家中的所有文件和文件夹中格式为jpg的文件 参考: http://www.2cto. ...

  8. [转]C#中调用资源管理器(Explorer.exe)打开指定文件夹 + 并选中指定文件 + 调用(系统默认的播放类)软件(如WMP)打开(播放歌曲等)文件

    原文:http://www.crifan.com/csharp_call_explorer_to_open_destinate_folder_and_select_specific_file/ C#中 ...

  9. 递归输出文件夹下的所有文件的名称(转自 MSDN)

    问题:如何输出给定文件夹目录下面的所有文件的名称? C#代码: using System; using System.IO; namespace MyTest { public class Progr ...

随机推荐

  1. git 命令

    切换仓库地址: git remote set-url origin xxx.git切换分支:git checkout name撤销修改:git checkout -- file删除文件:git rm  ...

  2. HTML块级元素

    前面的话   在HTML5出现之前,人们一般把元素分为块级.内联和内联块元素.本文将详细介绍HTML块级元素 h   标题(Heading)元素有六个不同的级别,<h1>是最高级的,而&l ...

  3. redis集成到Springmvc中及使用实例

    redis是现在主流的缓存工具了,因为使用简单.高效且对服务器要求较小,用于大数据量下的缓存 spring也提供了对redis的支持: org.springframework.data.redis.c ...

  4. angular2系列教程(十一)路由嵌套、路由生命周期、matrix URL notation

    今天我们要讲的是ng2的路由的第二部分,包括路由嵌套.路由生命周期等知识点. 例子 例子仍然是上节课的例子:

  5. SharpMap简析

    1.背景 因为项目需求,需要基于开源项目来对SHP进行相关操作.涉及到的主要功能就是加载SHP读取其中的属性信息和几何信息.于是选择了Sharpmap来进行,在使用中对其相关功能做了初步了解,做个总结 ...

  6. MySQL 系列(四)主从复制、备份恢复方案生产环境实战

    第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...

  7. 代码的坏味道(15)——冗余类(Lazy Class)

    坏味道--冗余类(Lazy Class) 特征 理解和维护类总是费时费力的.如果一个类不值得你花费精力,它就应该被删除. 问题原因 也许一个类的初始设计是一个功能完全的类,然而随着代码的变迁,变得没什 ...

  8. Java实现Excel中的NORMSDIST函数和NORMSINV函数

    由于工作中需要将Excel中的此两种函数转换成java函数,从而计算内部评级的资本占用率和资本占用金额.经过多方查阅资料和整理,总结出如下两个转换方法 标准正态分布累计函数NORMSDIST: pub ...

  9. OSGi规范的C#实现开源

    这是大约在3-4年前完成的一个C#实现的OSGi框架,实现的过程参照了OSGi规范与与一些实现思路(感谢当时的那些资料与项目),此框架虽然仅在几个小型项目有过实际的应用,但OSGi的规范实现还是相对比 ...

  10. Raspkate - 基于.NET的可运行于树莓派的轻量型Web服务器

    最近在业余时间玩玩树莓派,刚开始的时候在树莓派里写一些基于wiringPi库的C语言程序来控制树莓派的GPIO引脚,从而控制LED发光二极管的闪烁,后来觉得,是不是可以使用HTML5+jQuery等流 ...