在 Implementation of Lua 5.0 中的第 4 节“表格”中有一个例子:
本地 t = {100, 200, 300, x = 9.3}
所以我们有t[4] == nil
。如果我写t[0] = 0
,这将转到哈希部分。
如果我写 t[5] = 500
它会去哪里? 数组部分还是哈希部分?
如果存在差异,我很想听到 Lua 5.1、Lua 5.2 和 LuaJIT 2 实现的答案。
最佳答案
从 1 开始的连续整数键始终位于数组部分。
非正整数的键总是出现在哈希部分。
除此之外,它是未指定的,因此您无法根据规范预测 t[5]
将存储在哪里(并且它可能会或可能不会在两者之间移动,例如,如果您创建然后删除t[4]
。)
LuaJIT 2 略有不同 - 它还将 t[0]
存储在数组部分。
如果您需要它是可预测的(这可能是一种设计味道),请坚持使用纯数组表(从 1 开始的连续整数键 - 如果您想留出间隙,请使用值 false
而不是 nil
)或纯哈希表(避免使用非负整数键。)
关于Lua:理解表数组部分和哈希部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17570506/