Lua - 我如何使用另一个lib?

时间:2011-10-29 15:25:20

标签: module lua

我在另一个内部使用一个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习语/方法吗?

1 个答案:

答案 0 :(得分:6)

只需直接在require 'foo'模块中致电bar即可。这是完全合法的。 foo模块只会加载一次。为了不将其泄漏出bar模块,请将其存储在本地变量中。

您也可以使用此习惯用法将一个大模块分成几个部分,并让一个模块需要所有其他模块。用户必须require只有一个模块。

相关问题