Si vous vous référez au Redis EVAL
documentation, vous pouvez voir quelles sont les règles utilisées par Redis pour convertir une table Lua en une réponse Redis :
- Table Lua (tableau) -> Réponse groupée multiple Redis (tronquée au premier zéro dans le tableau Lua le cas échéant )
- Table Lua avec un seul champ ok -> Réponse d'état Redis
- Table Lua avec un seul champ err -> Réponse d'erreur Redis
Donc, sauf cas particuliers 2 et 3, Redis suppose que votre table est une séquence (c'est-à-dire une liste), ce qui signifie qu'elle lit retv[1], retv[2], ...
jusqu'à ce qu'il rencontre un nil
élément (voici la section de code source correspondante).
Cela explique pourquoi retv["test"]
est ignoré dans votre cas.
Si vous modifiez votre code avec :
local retv = {"This", "is", "a", "bug" }
retv[5] = 1000
return retv
Ensuite, cet élément supplémentaire est renvoyé :
1) "This"
2) "is"
3) "a"
4) "bug"
5) (integer) 1000