Lua键名或自动索引?

假设有以下两张表格:

foo = {
  "aaa",
  "bbb",
  "ccc"
}

bar = {
  first  = "aaa",
  second = "bbb",
  third  = "ccc"
}

表格 foo 没有分配键,而 bar 有键。

当我循环遍历表格 bar 时,我会得到分配的键名,由于它是一个字符串,因此很容易知道这些键是在 Lua 脚本中定义的。

但是当我迭代 foo 时,我当然会得到一个整数作为键,从 1 开始。我如何看到(或者是否可行),这是一个“自动索引”键,而不是在表格中定义的?

我使用 lua_next()lua_type() 从 C 中遍历表格。

我需要把表格写回(作为 Lua 脚本)以确保其结构完全相同,这意味着如果一开始没有键(如 foo),我就不应该编写数字“自动索引”,只需编写值。

编辑

也许并不是那么清楚。简短的版本是:

是否有可能区分用户/程序员设置的数字索引 和 Lua 引擎自动分配的一个?

点赞
用户440558
用户440558

第一个 foo 等价于

foo = {
    1 = "aaa",
    2 = "bbb",
    3 = "ccc"
}

[不,它不是有效的 Lua,但这正是我要的原则。]

在这种情况下,索引 键。

2014-10-12 12:52:25
用户1009479
用户1009479

在每个表中都有键的值,你的示例中的两个表只是表构造函数的两种语法糖。

foo = {
  "aaa",
  "bbb",
  "ccc"
}

只是语法糖:

foo = {
  [1] = "aaa",
  [2] = "bbb",
  [3] = "ccc"
}

bar = {
  first  = "aaa",
  second = "bbb",
  third  = "ccc"
}

是语法糖:

bar = {
  ["first"]  = "aaa",
  ["second"] = "bbb",
  ["third"]  = "ccc"
}

这两种风格甚至可以混合使用,例如:

foobar = {
  "aaa",
  first  = "aaa",
  "bbb",
  second = "bbb",
  "ccc",
  third  = "ccc"
}

再次强调,每个值都有一个键,对于 foo,键是整数 1,对于 bar,键是字符串。

2014-10-12 13:00:09