为啥在 Lua 中使用本地需求?

Posted

技术标签:

【中文标题】为啥在 Lua 中使用本地需求?【英文标题】:Why use local require in Lua?为什么在 Lua 中使用本地需求? 【发布时间】:2016-08-17 17:05:38 【问题描述】:

这有什么区别

local audio = require "audio"

require "audio"

前者有什么优势吗?

【问题讨论】:

【参考方案1】:

在 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

ma​​in.lua

require("audio")

play()

或者

require("audio")

_G.play()

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

【讨论】:

常用local Audio = ,让客户端决定是否保存为全局。 所以主要原因是为了防止导入的文件破坏全局命名空间。我想另一个好处是避免名称冲突。

以上是关于为啥在 Lua 中使用本地需求?的主要内容,如果未能解决你的问题,请参考以下文章

RequireJS 中本地需求和全局需求的区别

连通C#与lua

为啥要对jvm做优化?

Lua BehaviourTree 各节点说明

Qt 集成 Lua

为啥在将使用 Diesel 特征的函数重写为特征方法时会出现“溢出评估需求”?