Lua密钥名称还是自动索引?

时间:2014-10-12 12:47:21

标签: c loops lua indexing lua-table

假设以下两个表:

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

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

foo有密钥时,表bar没有分配密钥。 当我迭代表bar时,我得到了指定的密钥名称,因为它是一个字符串,很容易判断这些密钥是在Lua脚本中定义的。

但是当我迭代foo时,当然,我将从1开始获取一个整数作为键。我怎样才能看到(或甚至可能)这是一个“自动索引”键和表中没有定义?

我正在使用lua_next()从C遍历表格并使用lua_type()检查类型

我需要以与结构相同的方式回写表(作为Lua脚本),这意味着如果没有开始的键(如在foo中),我将不会写数字“自动索引”,只有值。

修改
也许不是那么清楚。简短版本将是:

  

可以区分用户/程序员设置的数字索引   和一个由Lua Engine分配的自动?

2 个答案:

答案 0 :(得分:3)

没有这样的值在每个表中都没有键。您的示例中的两个表只是表构造函数的两种语法糖样式。

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"
}

同样,每个值都有一个键,在1的情况下它只是foo的整数,而在bar的情况下只是字符串。

答案 1 :(得分:1)

第一个foo等同于

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

[不,它不是有效的Lua,但它是我之后的原则。]

在这种情况下,索引键。