2016-04-24 14 views

risposta

5

In Lua un modulo è un oggetto che esporta diverse funzioni pubbliche. Ci sono due modi per definire un modulo in Lua. Per esempio:

module(..., package.seeall) 

Audio = {} 

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

O in alternativa:

Audio = {} 

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

return Audio 

Il primo è il vecchio modo di definire un modulo, ma è ancora può essere trovato in molti esempi. Quest'ultimo è il modo preferito di definire i moduli ora.

Quindi, a meno che non si assegni un modulo a una variabile locale, non è possibile fare riferimento alle sue variabili e metodi esportati.

Se audio aveva definito qualsiasi funzione globale, tali funzioni sarebbero disponibili dopo l'importazione di audio. Le funzioni e le variabili globali sono associate all'oggetto globale. In Lua esiste una variabile chiamata _G che contiene tutte le variabili globali e le funzioni definite. Per esempio,

audio.lua

function play() 
    print("play") 
end 

main.lua

require("audio") 

play() 

O

require("audio") 

_G.play() 

che funziona, ma mettere tutto in oggetto globale ha diversi inconvenienti S. Variabili e funzioni possono essere sovrascritte. Alla fine l'oggetto globale diventa gonfio. È meglio strutturare tutto nei moduli, quindi le variabili e i metodi sono incapsulati nel proprio spazio dei nomi.

+4

È comune utilizzare 'local Audio = {}' e lasciare che il client decida se salvarlo come globale. – lhf

+0

Quindi, il motivo principale è impedire che il file importato copi lo spazio dei nomi globale. E immagino che un altro vantaggio sia evitare conflitti di nome. – Timmmm

Problemi correlati