Questa è una risposta supplementare con informazioni di base.
Gli identificatori Lua sono utilizzati per variabili globali, variabili locali, parametri e campi di tabella. Hanno qualsiasi tipo di valore.
Le funzioni Lua sono valori. Le funzioni Lua sono tutte anonime, indipendentemente dalla sintassi utilizzata per definirle.
function f()
--...
end
è un'istruzione Lua che compila una definizione di funzione e un'assegnazione a una variabile. E 'un'alternativa per
f = function()
--...
end
Ogni volta che viene eseguita una definizione di funzione, produce un nuovo valore della funzione, che viene poi utilizzato in qualsiasi espressione o assegnazione associato.
Dovrebbe essere chiaro che nessuna delle due istruzioni crea necessariamente una nuova variabile, né richiede di avere sempre lo stesso valore, né richiede di mantenere sempre un valore di funzione. Inoltre, il valore della funzione creato non deve essere sempre trattenuto solo da una variabile. Può essere copiato come qualsiasi altro valore.
Inoltre, proprio come gli altri valori, i valori delle funzioni vengono eliminati. Quindi, se f
ha un valore di funzione e gli viene assegnato un valore diverso o esce dall'ambito (ad esempio, se non si trattava di una variabile globale), il valore precedente verrà raccolto automaticamente quando nient'altro si riferisce ad esso.
Senza alcun altro contesto per function f() end
, si potrebbe supporre che f
è una variabile globale. Ma non è necessariamente il caso. Se f
era un locale locale o un parametro, è lo f
a cui verrebbe assegnato.
fonte
2014-06-21 10:58:41
è il 'do' necessario? – Blauhirn
@Blauhirn, non rigorosamente, ma mantiene la definizione di 'old' local a quel blocco. – lhf