Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Module 如何访问模块中的其他模块?_Module_Lua - Fatal编程技术网

Module 如何访问模块中的其他模块?

Module 如何访问模块中的其他模块?,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 两者都

我正在努力解决与模块相关的函数的“全局”方面。也许这里有人能告诉我这个例子是否有效,解释为什么,然后告诉我正确的方法

如果我有两个模块:

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
两者都在“主”文件中调用


如果从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