Supponiamo che inserisco una stringa in una tabella come segue:In Lua, posso selezionare facilmente il risultato Nth senza funzioni personalizzate?
table.insert(tbl, mystring)
e che mystring
è generato sostituendo tutte le occorrenze di "a" con "b" in input
:
mystring = string.gsub(input, "a", "b")
L'ovvio modo per combinare i due in una sola istruzione non funziona, perché gsub
restituisce due risultati:
table.insert(tbl, string.gsub(input, "a", "b")) -- error!
-- (second result of gsub is passed into table.insert)
che, suppongo, è il prezzo pagato per supportare più valori di ritorno. La domanda è: esiste un modo standard incorporato per selezionare solo il primo valore di ritorno? Quando ho trovato select
ho pensato che fosse esattamente quello che ha fatto, ma purtroppo, in realtà seleziona tutti i risultati da N in poi, e quindi non aiuta in questo scenario.
Ora so che posso definire il mio select
come segue:
function select1(n, ...)
return arg[n]
end
table.insert(tbl, select1(1, string.gsub(input, "a", "b")))
ma questo non guardare a destra, dal momento che mi aspetto un built-in modo di fare questo.
Quindi, mi manca qualche costrutto integrato? In caso contrario, gli sviluppatori Lua tendono a utilizzare una variabile separata per estrarre l'argomento corretto o scrivere le proprie funzioni select1
?
Grazie! Scommetto che alla fine mi imbatterò nella stessa situazione, volendo solo il secondo _ risultato: quali opzioni ho allora? –
@romkyns: aggiornato il mio post per rispondere. Anche se la tua funzione 'select1' potrebbe essere più leggibile. – interjay
Mi piace usare i manichini per questo, cioè '_, _, _, fourthVal, _ = giveMeFive()' Lo trovo più leggibile in questo modo. – deorst