我只是在嵌入式口译员的帮助下弄湿了一些Lua(所以我不能对环境进行很多控制)。现有的Lua脚本基础架构是我们从外部供应商处获得的,所以
他们的策略是将大量模块加载到全局命名空间中 - 它们有很多模块文件可以有效地执行
modulename = modulename or {}
modulename.something = function()
...
end
这是找到的,因为它提供了我必须使用的API,一切都很容易。但是,我确定我会遇到名字冲突;如果我创建自己的模块X并且他们已经有一个模块X,我最终会添加它(并且代码存在于不同的地方,因此我可以轻易地无意中执行此操作)。
我想要做的是一个单根命名空间,我的所有模块都是其中的一部分,所以我干净利落,不必担心意外覆盖核心api
到目前为止我所得到的是:
root = root or {}
root.modulename = require('path to module')
-- etc...
return root
作为我的根命名空间然后
local modulename = {}
function modulename.something()
return "foo"
end
return modulename
这似乎给了我想要的隔离:我可以做到
root.modulename.something()
解释器中的得到我的" foo"。
然而,我很高兴知道这可能带来什么,以及是否有更常见的解决方案。如果root.othermodule
想要使用root.modulename
的成员,可能会发生什么?我是否会手动管理加载顺序?