Ho una funzione lua che accetta più parametri e restituisce tanti valori quanti sono i parametri. Ogni valore di ritorno corrisponde a un parametro. Per illustrare, si consideri una funzione che legge il valore di una coppia chiave/valore da un database:Best practice per la restituzione di un errore da una funzione lua che restituisce più valori
val1, val2, val3 = my_function("key1", "key2", "key3");
val1 = my_function("key1");
Qual è il modo migliore per restituire un errore da my_function
? (ad esempio se una "chiave" fornita non è valida)
Capisco un modo è quello di restituire due valori su errore, nil
e una stringa di errore. È questo l'approccio migliore? Per esempio:
val1, val2, val3 = my_function("key1", "key2", "key3");
if val1 then
-- Use val1, val2, and val3.
else
print("ERROR: " .. val2);
end
Modifica
Alcuni punti aggiuntivi:
- Lo script Lua è essere eseguito da un programma C utilizzando
lua_pcall()
. - Il programma C non deve interrompersi se lo script non riesce.
my_function()
è implementato in C.- Quando
my_function()
non riesce, dovrebbe anche restituire un codice di errore (o un messaggio) che indica il motivo per cui non è riuscito.
Ho modificato la domanda per chiarire alcuni punti. Poiché lo script lua (che alla fine chiama 'my_function()') viene eseguito da C con 'lua_pcall()', dovrei 'my_function()' restituire una variabile "ok" come descritto sopra? (ad esempio, ok, val1, val2, val3 = my_function() '). – Ben
@Ben, sì, includerei un valore 'ok' aggiuntivo - che sembra essere il modo più pulito. Vorrei anche raccomandare una revisione nel design; poiché entrambe le funzioni sono in C, probabilmente sarà più semplice (e più veloce) dimenticare Lua e fare semplicemente tutto in C. – kikito
@kikto, grazie per aver chiarito. In questo caso ha sicuramente senso usare lua (o un equivalente) per estendere il prodotto. – Ben