Si consulta Redis EVAL
documentación puede ver cuáles son las reglas que utiliza Redis para convertir una tabla de Lua en una respuesta de Redis:
- Tabla de Lua (matriz) -> Redis multirespuesta masiva (truncada al primer cero dentro de la matriz de Lua, si corresponde )
- Tabla Lua con un solo campo ok -> Respuesta de estado de Redis
- Tabla de Lua con un único campo de error -> Respuesta de error de Redis
Entonces, excepto en los casos especiales 2 y 3, Redis asume que su tabla es una secuencia (es decir, una lista), lo que significa que lee retv[1], retv[2], ...
hasta que encuentra un nil
(aquí está la sección del código fuente correspondiente).
Esto explica por qué retv["test"]
se ignora en su caso.
Si cambia su código con:
local retv = {"This", "is", "a", "bug" }
retv[5] = 1000
return retv
Luego se devuelve este elemento adicional:
1) "This"
2) "is"
3) "a"
4) "bug"
5) (integer) 1000