如何灵活组织Lua模块路径并编写require调用?
- 内容介绍
- 文章标签
- 相关推荐
本文共计481个文字,预计阅读时间需要2分钟。
假设我有这样一个项目,其文件结构如下所示:
| main.lua|--- model| |--- a.lua| |--- b.lua|--- view |--- a.lua |--- b.luamodel/a.lua requires model/b.lua: require 'b'view/a.lua requires view/b.lua: require 'b'
假设我有一个项目,其文件夹结构如下所示:| 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的模块搜索规则,这看起来更容易?
举个例子,而不是做:
-- 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之间的歧义.
本文共计481个文字,预计阅读时间需要2分钟。
假设我有这样一个项目,其文件结构如下所示:
| main.lua|--- model| |--- a.lua| |--- b.lua|--- view |--- a.lua |--- b.luamodel/a.lua requires model/b.lua: require 'b'view/a.lua requires view/b.lua: require 'b'
假设我有一个项目,其文件夹结构如下所示:| 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的模块搜索规则,这看起来更容易?
举个例子,而不是做:
-- 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之间的歧义.

