Invece di usare lunghe liste di argomenti nelle mie definizioni di funzioni, preferisco passare un paio di parametri fissi e un tavolo di 'params aggiuntive' in questo modo:LUA: Alla ricerca di mezzi efficaci e senza errori di assegnazione argomenti di default
function:doit(text, params)
end
Questo è bello in quanto consente di aggiungere nuovi parametri denominati in seguito senza interrompere le chiamate precedenti.
Il problema che sto vivendo si verifica quando si tenta di forzare i valori di default per alcuni dei params:
function:doit(text, params)
local font = params.font or native.systemBold
local fontSize = params.fontSize or 24
local emboss = params.emboss or true
-- ...
end
Il codice di cui sopra funziona bene in tutti i casi, tranne quando sono passato a 'false' per rilievo :
doit("Test text", { fontSize = 32, emboss = false })
Il codice sopra riportato farà sì che il rilievo venga impostato su true quando volevo veramente che fosse falso.
Per essere chiari, quello che voglio è che il primo valore non NIL venga assegnato a rilievo, invece sto ricevendo un primo non-falso e non-NIL.
Per combattere questo problema ho scritto un piccolo pezzo di codice per trovare il primo valore non NIL in una tabella e di ritornare che:
function firstNotNil(...)
for i = 1, #arg do
local theArg = arg[i]
if(theArg ~= nil) then return theArg end
end
return nil
end
Usando questa funzione avrei riscrivere l'assegnazione rilievo come segue:
local emboss = firstNotNil(params.emboss, true)
Ora, questo funziona certamente, ma sembra così inefficiente e sopra le righe. Spero che ci sia un modo più compatto per farlo.
Si prega di notare: Ho trovato questo rubino costrutto che sembrava promettente e spero Lua ha qualcosa di simile:
[c,b,a].detect { |i| i > 0 } -- Assign first non-zero in order: c,b,a
Hai estratto [questa domanda precedente] (http://stackoverflow.com/questions/6022519/define-default-values-for-function-arguments) su un argomento simile? – hugomg
"sembra così inefficiente" Hai dati di profilazione effettivi per eseguire il backup, o è solo una di quelle cose di cui non dovresti davvero preoccuparti? –