Se vuoi argomenti con nome e valori predefiniti come PHP o Python, puoi chiamare la tua funzione con un costruttore di tabelle:
myfunction{a,b=3,c=2}
(Questo è visto in molti posti in Lua, come le forme avanzate dei moduli di protocollo e dei costruttori di LuaSocket in IUPLua .)
La funzione stessa potrebbe avere una firma come questa:
function myfunction(t)
setmetatable(t,{__index={b=7, c=5}})
local a, b, c =
t[1] or t.a,
t[2] or t.b,
t[3] or t.c
end
Eventuali valori mancanti dalla tabella dei parametri saranno presi dalla __index
tabella nella sua metatables (vedere la documentazione sui metatables ).
Naturalmente, sono possibili stili di parametri più avanzati utilizzando costruttori di tabelle e funzioni: puoi scrivere tutto ciò di cui hai bisogno. Ad esempio, ecco una funzione che costruisce una funzione che prende tabelle di argomenti denominati o posizionali da una tabella che definisce i nomi dei parametri ei valori predefiniti e una funzione che accetta un elenco di argomenti regolari.
Come funzionalità non a livello di linguaggio, tali chiamate possono essere modificate per fornire nuovi comportamenti e semantiche:
- È possibile fare in modo che le variabili accettino più di un nome
- Le variabili di posizione e le variabili di parole chiave possono essere inframmezzate e la definizione di entrambe può dare la precedenza a entrambe (o causare un errore)
- È possibile creare variabili senza posizione solo per parole chiave, nonché variabili senza posizione senza nome
- La costruzione della tabella abbastanza dettagliata potrebbe essere eseguita analizzando una stringa
- L'elenco degli argomenti potrebbe essere utilizzato letteralmente se la funzione viene chiamata con qualcosa di diverso da 1 tabella
Alcune funzioni utili per scrivere i traduttori di argomenti sono unpack
(passando a table.unpack
in 5.2), setfenv
(deprecato in 5.2 con la nuova _ENV
costruzione) e select
(che restituisce un singolo valore da un dato elenco di argomenti, o la lunghezza dell'elenco con '#'
).