微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何组织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”

但是,如果我这样做,每次更改文件夹结构时都必须修改这些文件.

所以我的问题是:

>如何在模块文件中没有硬代码路径的情况下修复模块路径问题?
>为什么Lua不使用Node.js的模块搜索规则,这看起来更容易?

解决方法

当您需要一个模块时,来自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之间的歧义.

原文地址:https://www.jb51.cc/lua/274573.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐