Che c'è la differenza tra questoPerché utilizzare la richiesta locale in Lua?
local audio = require "audio"
e
require "audio"
è un qualsiasi vantaggio della prima?
Che c'è la differenza tra questoPerché utilizzare la richiesta locale in Lua?
local audio = require "audio"
e
require "audio"
è un qualsiasi vantaggio della prima?
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.
È comune utilizzare 'local Audio = {}' e lasciare che il client decida se salvarlo come globale. – lhf
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