Jeśli odwołasz się do Redis EVAL
w dokumentacji możesz zobaczyć, jakie są zasady, których Redis używa do konwersji tabeli Lua na odpowiedź Redis:
- Tabela Lua (tablica) -> Redis odpowiedź zbiorcza (skrócona do pierwszego poziomu wewnątrz tablicy Lua, jeśli taka istnieje )
- Tabela Lua z jednym polem OK -> Odpowiedź statusu Redis
- Tabela Lua z pojedynczym polem błędu -> Odpowiedź błędu Redis
Więc z wyjątkiem szczególnych przypadków 2 i 3, Redis zakłada, że twoja tabela jest sekwencją (tj. listą), co oznacza, że czyta retv[1], retv[2], ...
dopóki nie napotka nil
element (tutaj jest odpowiednia sekcja kodu źródłowego).
To wyjaśnia, dlaczego retv["test"]
jest ignorowane w twoim przypadku.
Jeśli zmienisz kod za pomocą:
local retv = {"This", "is", "a", "bug" }
retv[5] = 1000
return retv
Następnie zwracany jest ten dodatkowy element:
1) "This"
2) "is"
3) "a"
4) "bug"
5) (integer) 1000