假设有以下两个表:
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/