lua中的嵌套命名空间

时间:2015-11-06 21:14:46

标签: lua namespaces

我只是在嵌入式口译员的帮助下弄湿了一些Lua(所以我不能对环境进行很多控制)。现有的Lua脚本基础架构是我们从外部供应商处获得的,所以

  1. 除了紧急情况和
  2. 之外,我不想改变它
  3. 我希望将代码与供应商完全分开。
  4. 他们的策略是将大量模块加载到全局命名空间中 - 它们有很多模块文件可以有效地执行

    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的成员,可能会发生什么?我是否会手动管理加载顺序?

0 个答案:

没有答案