我在另一个内部使用一个Lua lib时遇到问题。我不确定最好的方法。
我有一个库,它返回一个带有函数的(非全局)表,如下所示:
-- foo.lua
local foo = {}
function foo:m1(...) ... end
function foo:m2(...) ... end
return foo
此库可以插入全局或本地范围,具体取决于用户的需求:
-- globally
foo = require('foo')
-- or locally
local foo = require('foo')
我现在正在尝试创建另一个需要/使用此bar
lib的库(让我们称之为foo
)。像这样:
-- bar.lua
local bar={}
function bar:m3(...)
...
foo:m1()
...
end
我的麻烦是 - 我不知道如何将“foo
”传递给bar
。
理想情况下,我想将其作为参数发送到require
:
local foo = require('foo')
local bar = require('bar', foo)
但我不认为这是可能的(是吗?)。我能想到的另一个选择是向init
添加bar
方法:
local foo = require('foo')
local bar = require('bar')
bar:init(foo)
这样可行,但对我来说看起来不太干净;可能会忘记添加第三行,使bar
处于“不安全”状态。
我缺少一个常见的Lua习语/方法吗?
答案 0 :(得分:6)
只需直接在require 'foo'
模块中致电bar
即可。这是完全合法的。 foo
模块只会加载一次。为了不将其泄漏出bar
模块,请将其存储在本地变量中。
您也可以使用此习惯用法将一个大模块分成几个部分,并让一个模块需要所有其他模块。用户必须require
只有一个模块。