Se fai riferimento a Redis EVAL
documentazione puoi vedere quali sono le regole che Redis usa per convertire una tabella Lua in una risposta Redis:
- Tabella Lua (array) -> Risposta Redis multi bulk (troncata al primo zero all'interno dell'array Lua, se presente )
- Tabella Lua con un solo campo ok -> Risposta stato Redis
- Tabella Lua con un singolo campo err -> Risposta errore Redis
Quindi, eccetto per i casi speciali 2 e 3, Redis presume che la tua tabella sia una sequenza (cioè un elenco), il che significa che legge retv[1], retv[2], ...
finché non incontra un nil
element (qui è la sezione del codice sorgente corrispondente).
Questo spiega perché retv["test"]
viene ignorato nel tuo caso.
Se modifichi il tuo codice con:
local retv = {"This", "is", "a", "bug" }
retv[5] = 1000
return retv
Quindi questo elemento aggiuntivo viene restituito:
1) "This"
2) "is"
3) "a"
4) "bug"
5) (integer) 1000