为什么在 Lua 中使用本地要求?
Why use local require in Lua?
这有什么区别
local audio = require "audio"
和
require "audio"
前者有什么优势吗?
在 Lua 中,模块是导出多个 public 函数的对象。在 Lua 中有两种定义模块的方法。例如:
module(..., package.seeall)
Audio = {}
function Audio:play()
print("play")
end
或者:
Audio = {}
function Audio:play()
print("play")
end
return Audio
前者是定义模块的旧方法,但在许多示例中仍然可以找到它。后者是现在定义模块的首选方式。
因此,除非您将模块分配给局部变量,否则无法引用其导出的变量和方法。
如果 audio
定义了任何全局函数,这些函数将在 audio
被导入后可用。全局函数和变量附加到全局对象。在 Lua 中有一个名为 _G 的变量,它包含所有已定义的全局变量和函数。例如,
audio.lua
function play()
print("play")
end
main.lua
require("audio")
play()
或
require("audio")
_G.play()
这行得通,但是将所有内容都放在全局对象中会带来一些不便。变量和函数可能会被覆盖。最终,全局对象变得臃肿。最好在模块中构建所有内容,因此变量和方法都封装在它们自己的命名空间中。
这有什么区别
local audio = require "audio"
和
require "audio"
前者有什么优势吗?
在 Lua 中,模块是导出多个 public 函数的对象。在 Lua 中有两种定义模块的方法。例如:
module(..., package.seeall)
Audio = {}
function Audio:play()
print("play")
end
或者:
Audio = {}
function Audio:play()
print("play")
end
return Audio
前者是定义模块的旧方法,但在许多示例中仍然可以找到它。后者是现在定义模块的首选方式。
因此,除非您将模块分配给局部变量,否则无法引用其导出的变量和方法。
如果 audio
定义了任何全局函数,这些函数将在 audio
被导入后可用。全局函数和变量附加到全局对象。在 Lua 中有一个名为 _G 的变量,它包含所有已定义的全局变量和函数。例如,
audio.lua
function play()
print("play")
end
main.lua
require("audio")
play()
或
require("audio")
_G.play()
这行得通,但是将所有内容都放在全局对象中会带来一些不便。变量和函数可能会被覆盖。最终,全局对象变得臃肿。最好在模块中构建所有内容,因此变量和方法都封装在它们自己的命名空间中。