Module 如何访问模块中的其他模块?
我正在努力解决与模块相关的函数的“全局”方面。也许这里有人能告诉我这个例子是否有效,解释为什么,然后告诉我正确的方法 如果我有两个模块: f1.luaModule 如何访问模块中的其他模块?,module,lua,Module,Lua,我正在努力解决与模块相关的函数的“全局”方面。也许这里有人能告诉我这个例子是否有效,解释为什么,然后告诉我正确的方法 如果我有两个模块: f1.lua local mod = T{} function mod.print_msg(msg) print(msg) end return mod f2.lua local mod = T{} function mod.print_hello() msgmod.print_msg('Hello') end return mod 两者都
local mod = T{}
function mod.print_msg(msg)
print(msg)
end
return mod
f2.lua
local mod = T{}
function mod.print_hello()
msgmod.print_msg('Hello')
end
return mod
两者都在“主”文件中调用
如果从f2调用print_hello,它是否仍然有效?或者我是否需要在f2中加载file()f1.lua?如果在执行
msgmod=…
之后(在任何文件中)调用它,它将有效,但不是在执行之前。由于使用了globals,这是一种令人困惑的情况
通常,您不希望在模块中使用这样的全局变量。您应该使用<代码>处理要求:< /COD> >正如您将在C++中使用的代码< > >包含< /代码>。因此,想要使用f1.lua中定义的print\u msg
的f2.lua可能如下所示:
local f1 = require('f1')
local mod = T{}
function mod.print_hello()
f1.print_msg('Hello')
end
return mod
您还应该在主文件中使用require
(并养成将所有内容本地化的习惯):
请注意,我们可以省略第一行,因为我们实际上并没有在main中使用f1,当我们需要f2时,f2将自动需要它。与加载文件
不同,要求
自动缓存加载的模块,以便它们只加载一次。同样,require
几乎总是您想要使用的
编写模块的一般模式是要求将所有依赖模块转换为局部变量,然后根据需要使用它们来实现模块功能:
local dep1 = require('dep1')
local dep2 = require('dep2')
...
local mod = {}
function mod.foo ()
return dep1.bar(dep2.bazz())
end
return mod
local msgmod = require('f1')
local himod = require('f2')
himod.print_hello()
local dep1 = require('dep1')
local dep2 = require('dep2')
...
local mod = {}
function mod.foo ()
return dep1.bar(dep2.bazz())
end
return mod