Nếu bạn tham khảo Redis EVAL
tài liệu hướng dẫn bạn có thể xem các quy tắc mà Redis sử dụng để chuyển đổi bảng Lua thành câu trả lời của Redis:
- Bảng Lua (mảng) -> Làm lại nhiều câu trả lời hàng loạt ( được cắt bớt thành đầu tiên bên trong mảng Lua nếu có )
- Bảng Lua với một trường ok duy nhất -> Trạng thái trả lời lại
- Bảng Lua với một trường lỗi duy nhất -> Lỗi trả lời lại
Vì vậy, ngoại trừ các trường hợp đặc biệt 2 và 3, Redis giả sử bảng của bạn là một chuỗi (tức là danh sách) có nghĩa là nó đọc retv[1], retv[2], ...
cho đến khi nó gặp nil
phần tử (đây là phần mã nguồn tương ứng).
Điều này giải thích tại sao retv["test"]
được bỏ qua trong trường hợp của bạn.
Nếu bạn thay đổi mã của mình bằng:
local retv = {"This", "is", "a", "bug" }
retv[5] = 1000
return retv
Sau đó, phần tử bổ sung này được trả về:
1) "This"
2) "is"
3) "a"
4) "bug"
5) (integer) 1000