我不确定如何,但我们设法创建了一个具有两个完全相同的键的表。执行 for
时循环 pairs
我们得到的表和打印键和值:
1 true
1 true
我们认为这可能是不同类型或什么的问题,所以我们决定将其转换为 json(我们使用 Corona SDK 和内部 json 模块)。
结果相当惊人:
"ourTable" : { "1" : true, "1" : true }
我们将其存储在一个文件中以检查值,以及
"1"
的两个十六进制值是 31
.所以另一个测试:将该 json 转换为 lua 表和...与以前相同的结果:具有相同键的两个条目。
我以前从未见过这样的事情,老实说,我不知道如何检测和预防这种情况。
我们已经使用 lua 和 corona 几年了,这是我们第一次检测到这样的事情,但它可能以前发生过,我们没有检测到。这可能会导致一些令人难以置信的糟糕结果。
Corona SDK 使用 Lua 5.1。
我们将此表 json 编码存储在一个文件中。重新启动应用程序后,文件再次加载,它只包含一个条目!现在......这个表只包含“id”和 bool 值,两个值完全相同,但我想知道如果值不同会发生什么,哪一个会保留?我现在想到了很多场景。
我无法重现此问题,但我们会做什么:
tab[key] = value
编辑:
好吧,现在重现这个问题:
local d = {true}
d["1"]=true
for k,v in pairs(d) do
print(k,v)
end
1 true
1 true
最佳答案
实际上,在我添加了重现问题的方法之后,很明显发生了什么。
table 变得混杂起来。
当我这样做时:
for k,v in pairs(d) do
print(k,v, type(k))
end
这一切都说得通:
1 true number
1 true string
我们现在唯一的问题是
json
Corona SDK
中的模块已更改 1
编号为 "1"
字符串。
关于json - Lua 表 - 两个具有相同键的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34062793/