Lua - 我如何在一个库中使用另一个库?

我在使用一个 Lua lib 时遇到了困难,它需要在另一个 Lua lib 中使用。我不确定最好的方法是什么。

我有一个库,它返回一个(非全局)函数表,如下所示:

-foo.lua
local foo = {}
function foo:m1(...) ... end
function foo:m2(...) ... end
return foo

该库可以插入全局或本地作用域中,具体取决于用户的需求:

-在全局中
foo = require('foo')
-或者在本地中
local foo = require('foo')

现在我正在尝试创建另一个 lib(我们称之为bar),它需要使用 foo lib。

-- bar.lua
local bar={}
function bar:m3(...)
  ...
  foo:m1()
  ...
end

我的问题是--我不知道如何将foo“传递”给bar

理想情况下,我想将其作为参数发送到require中:

local foo = require('foo')
local bar = require('bar', foo)

但我不认为这是可能的(吗?)。我能想到的另一种选择是向bar添加一个 init 方法:

local foo = require('foo')
local bar = require('bar')
bar:init(foo)

这种方法可以,但我认为它看起来不太干净;很可能忘记添加第三行,导致bar处于一个“不安全”的状态。

我是否错过了一种常见的 Lua 语言习惯/方法?

原文链接 https://stackoverflow.com/questions/7939774

点赞
stackoverflow用户221509
stackoverflow用户221509

在你的 bar 模块中直接调用 require 'foo'。这是完全合法的。foo 模块只会被加载一次。为了避免将它泄漏出 bar 模块,将其存储在一个局部变量中。

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

2011-10-29 16:04:52