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

问题描述:

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

local audio = require "audio" 

require "audio" 

之间的差别是前者的任何好处?

在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() 

这样的作品,但把一切在全局对象有几个不便秒。变量和函数可能被覆盖。最终全局对象变得臃肿。最好将所有模块组织起来,因此变量和方法都封装在自己的名称空间中。

+4

通常使用'local Audio = {}'让客户决定是否将其保存为全局。 – lhf

+0

所以主要原因是阻止导入的文件破坏全局名称空间。我想另一个好处是避免名称冲突。 – Timmmm