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

kik*_*ito 1 lua module

我在另一个内部使用一个Lua lib时遇到了麻烦.我不确定最好的方法.

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

-- foo.lua
local foo = {}
function foo:m1(...) ... end
function foo:m2(...) ... end
return foo
Run Code Online (Sandbox Code Playgroud)

可以将此库插入全局或本地范围,具体取决于用户的需求:

-- globally
foo = require('foo')
-- or locally
local foo = require('foo')
Run Code Online (Sandbox Code Playgroud)

我现在正在尝试创建另一个bar需要/使用此foolib的库(让我们称之为).像这样的东西:

-- bar.lua
local bar={}
function bar:m3(...)
  ...
  foo:m1()
  ...
end
Run Code Online (Sandbox Code Playgroud)

我的问题是-我不知道如何"传递" foobar.

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

local foo = require('foo')
local bar = require('bar', foo)
Run Code Online (Sandbox Code Playgroud)

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

local foo = require('foo')
local bar = require('bar')
bar:init(foo)
Run Code Online (Sandbox Code Playgroud)

这有效,但对我来说看起来不太干净; 有可能忘记添加第三行,bar处于"不安全"状态.

我缺少一个常见的Lua成语/方法吗?

Mic*_*man 6

只需require 'foo'直接在你的bar模块中打电话.这是完全合法的.该foo模块仅加载一次.为了不将其泄漏出bar模块,请将其存储在本地变量中.

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