Pokud se odkážete na EVAL
Redis dokumentaci můžete vidět, jaká jsou pravidla, která Redis používá k převodu tabulky Lua na odpověď Redis:
- Tabulka Lua (pole) -> Hromadná odpověď Redis (zkrácena na první nulu v poli Lua, pokud existuje )
- Tabulka Lua s jedním polem OK -> Odpověď stavu Redis
- Tabulka Lua s jedním polem Err -> Odpověď na chybu Redis
Takže kromě speciálních případů 2 a 3 Redis předpokládá, že vaše tabulka je sekvence (tj. seznam), což znamená, že čte retv[1], retv[2], ...
dokud nenarazí na nil
element (zde je odpovídající část zdrojového kódu).
To vysvětluje, proč retv["test"]
je ve vašem případě ignorováno.
Pokud změníte kód pomocí:
local retv = {"This", "is", "a", "bug" }
retv[5] = 1000
return retv
Poté se tento další prvek vrátí:
1) "This"
2) "is"
3) "a"
4) "bug"
5) (integer) 1000