c - Lua 键名或自动索引?

标签 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),我将不写数字“自动索引”,只写值。

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

is possible to distinguish between a numerical index set by the user/programmer and one auto assigned by the Lua Engine?

最佳答案

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

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 的情况下,它只是字符串.

关于c - Lua 键名或自动索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26325281/

相关文章:

css - 在lesscss中用奇数循环

lua - torch 调整张量大小

c++ - 如何在 Lua C API 中分配全局 Lua 函数变量?

c++ - While 循环和 If 语句和函数

loops - 在 Kotlin 中的功能循环中,如何执行 "break"或 "continue"?

c - 使用 OpenCv 应用灰度

c - 从C语言的文本文件中随机选择一个单词

c - 4个变量函数的平均值打印 "4.00000"(除以4)而不是实际的平均值

c++ - NtEnumerateKey() 的 KeyInformation 参数

大写字符串并返回局部变量