为什么在Lua中使用本地需求?

Tim*_*mmm 6 lua local-variables require

这有什么区别

local audio = require "audio"
Run Code Online (Sandbox Code Playgroud)

和

require "audio"
Run Code Online (Sandbox Code Playgroud)

前者有什么优势吗?

Die*_*ino 5

在Lua中,模块是导出多个公共函数的对象.在Lua中有两种定义模块的方法.例如:

module(..., package.seeall)

Audio = {}

function Audio:play()
   print("play")
end
Run Code Online (Sandbox Code Playgroud)

或者:

Audio = {}

function Audio:play()
   print("play")
end

return Audio
Run Code Online (Sandbox Code Playgroud)

前者是定义模块的旧方法,但在许多示例中仍然可以找到它.后者是现在定义模块的首选方式.

因此,除非您将模块分配给局部变量,否则无法引用其导出的变量和方法.

如果audio已定义任何全局函数,audio则导入后将可以使用这些函数.全局函数和变量附加到全局对象.在Lua中有一个名为_G的变量,它包含定义的所有全局变量和函数.例如,

audio.lua

function play()
   print("play")
end
Run Code Online (Sandbox Code Playgroud)

main.lua

require("audio")

play()
Run Code Online (Sandbox Code Playgroud)

要么

require("audio")

_G.play()
Run Code Online (Sandbox Code Playgroud)

这是有效的,但将所有内容放在全局对象中有几个不便之处.变量和函数可能会被覆盖.最终,全局对象变得臃肿.最好在模块中构造所有内容,因此变量和方法都封装在它们自己的命名空间中.

  • 通常使用`local Audio = {}`并让客户决定是否将其保存为全局. (4认同)