Lua:理解表数组部分和哈希部分

标签 lua interpreter language-implementation luajit

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/

相关文章:

将函数式语言编译为 C

c - Lua C编译-llua错误

image - 在 Torch (lua) 中可视化中间层中的图像

javascript - 将 Fortran 语言转换为 Javascript

scala - Scala 中的 Brainfuck 编译器

compiler-construction - Haskell 编译器是如何工作的?

string - Lua模式分离问题

javascript - 如何在 Node.js 中使用 Lua 脚本将多条记录插入 Redis 哈希

programming-languages - 初级程序员可以使用哪种语言来实现解释器?

functional-programming - 什么是FFP机器?