Jika Anda merujuk ke Redis EVAL
dokumentasi Anda dapat melihat aturan apa yang digunakan Redis untuk mengubah tabel Lua menjadi balasan Redis:
- Tabel Lua (array) -> Redis balasan multi massal (dipotong ke nol pertama di dalam larik Lua jika ada )
- Tabel Lua dengan satu bidang ok -> Balasan status redis
- Tabel Lua dengan satu bidang kesalahan -> Redis balasan kesalahan
Jadi kecuali dengan kasus khusus 2 dan 3, Redis menganggap tabel Anda adalah urutan (yaitu daftar) yang berarti membaca retv[1], retv[2], ...
sampai menemukan nil
elemen (ini adalah bagian kode sumber yang sesuai).
Ini menjelaskan mengapa retv["test"]
diabaikan dalam kasus Anda.
Jika Anda mengubah kode dengan:
local retv = {"This", "is", "a", "bug" }
retv[5] = 1000
return retv
Kemudian elemen tambahan ini dikembalikan:
1) "This"
2) "is"
3) "a"
4) "bug"
5) (integer) 1000