假设以下两个表:
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分配的自动?
答案 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,但它是我之后的原则。]
在这种情况下,索引是键。