如何组织Lua模块路径并编写“require”调用而不失灵活性?
假设我有一个项目,其文件夹结构如下所示:
| main.lua | |---<model> // this is a folder | |a.lua | |b.lua | |---<view> |a.lua |b.lua model / a.lua requries model / b.lua:require“b” view / a.lua requries view / b.lua:require“b” main.lua需要模型和视图中的文件. 现在我有问题让这些模块正确加载.我知道我可以通过将require调用更改为: model / a.lua:require“model.b” view / a.lua:require“view.b” 但是,如果我这样做,每次更改文件夹结构时都必须修改这些文件. 所以我的问题是: >如何在模块文件中没有硬代码路径的情况下修复模块路径问题? 解决方法
当您需要一个模块时,来自require的字符串参数会被传递到您可以使用变量参数语法访问的模块….您可以使用它来包含与当前模块位于同一路径中的其他相关模块要求不依赖于固定的硬编码模块名称.
举个例子,而不是做: -- model/a.lua require "model.b" 和 -- view/a.lua require "view.b" 你可以做: -- model/a.lua local thispath = select('1',...):match(".+%.") or "" require(thispath.."b") 和 -- view/a.lua local thispath = select('1',...):match(".+%.") or "" require(thispath.."b") 现在,如果您更改目录结构,例如.将视图移动到控制/子控制/ foobar之类的东西,然后控制/子控制/ foobar / a.lua(以前的视图/ a.lua)现在将尝试要求控制/子控制/ foobar / b.lua而不是“做正确的事情” ”. 当然main.lua仍然需要完全限定路径,因为你需要一些方法来消除模型/ a.lua和view / a.lua之间的歧义. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |