2016-04-24 7 views

Antwort

5

In Lua ist ein Modul ein Objekt, das mehrere öffentliche Funktionen exportiert. Es gibt zwei Möglichkeiten, ein Modul in Lua zu definieren. Zum Beispiel:

module(..., package.seeall) 

Audio = {} 

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

Oder alternativ:

Audio = {} 

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

return Audio 

Ersteres ist der alte Weg, um ein Modul zu definieren, aber es ist immer noch in vielen Beispielen. Letzteres ist die bevorzugte Art, Module jetzt zu definieren.

Also, es sei denn, Sie zuweisen ein Modul zu einer lokalen Variablen gibt es keine Möglichkeit, seine exportierten Variablen und Methoden zu verweisen.

Wenn audio globale Funktionen definiert hätte, wären diese Funktionen verfügbar, sobald audio importiert wurde. Globale Funktionen und Variablen sind an das globale Objekt angehängt. In Lua gibt es eine Variable namens _G, die alle definierten globalen Variablen und Funktionen enthält. Zum Beispiel

audio.lua

function play() 
    print("play") 
end 

main.lua

require("audio") 

play() 

Oder

require("audio") 

_G.play() 

das funktioniert, aber alles in dem globalen Objekt setzen hat einige Unannehmlichkeiten s. Variablen und Funktionen können überschrieben werden. Schließlich wird das globale Objekt aufgebläht. Es ist besser, alles in Modulen zu strukturieren, so dass Variablen und Methoden in ihrem eigenen Namespace gekapselt sind.

+4

Es ist üblich, 'local Audio = {}' zu verwenden und den Client entscheiden zu lassen, ob es als global gespeichert werden soll. – lhf

+0

Der Hauptgrund besteht also darin, zu verhindern, dass die importierte Datei den globalen Namespace überlistet. Und ich denke, ein weiterer Vorteil ist die Vermeidung von Namenskonflikten. – Timmmm