为什么在Lua中使用本地require?

这两者之间有什么区别

local audio = require "audio"

require "audio"

前者有什么优势吗?

点赞
用户134758
用户134758

在 Lua 中,一个模块是一个导出多个公共函数的对象。在 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()

这样可以运行,但将所有内容放入全局对象中具有几个不便。变量和函数可能会被覆盖。最终全局对象会变得臃肿。最好结构化模块中的所有内容,以便变量和方法封装在自己的名称空间中。

2016-04-24 10:12:49