首页 > 代码库 > 让Lua自己把文件夹下面的所有文件自动加载起来吧

让Lua自己把文件夹下面的所有文件自动加载起来吧

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

怎么来进行Lua文件的加载

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

为什么要这么做?

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

实际引用

技术分享 

总结

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

文件

-- local lfs = require("lfs")local AutoRequire = class("AutoRequire")local instance = nilfunction AutoRequire:getInstance()    return instanceendfunction AutoRequire:init(dir)    instance.OriginalPath = dir or lfs.currentdir()    print("instance.OriginalPath", instance.OriginalPath)endfunction AutoRequire:getTag()    return self._tagendfunction AutoRequire:getRequirePath()    return self._require_pathendfunction 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)endinstance = AutoRequire.new()cc.exports.AutoRequire = AutoRequirereturn AutoRequire

 

 

让Lua自己把文件夹下面的所有文件自动加载起来吧