我不确定如何,但是我们设法用两个键完全相同的方式创建了一个表。当执行表的for
循环pairs
并打印键和值时,我们得到:
1 true
1 true
并且我们认为可能是不同类型的问题,所以我们决定将其转换为json(我们使用Corona SDK和内部json模块)。
结果非常惊人:
"ourTable" : { "1" : true, "1" : true }
我们将其存储在文件中以检查值,以及的两个十六进制值"1"
are 31
。
因此,另一项测试:将json转换为lua表,并获得与以前相同的结果:具有相同键的两个条目。
我以前从未见过这样的事情,老实说,我不知道如何检测和预防这种情况。我们已经使用lua和corona已有好几年了,这是我们第一次检测到类似的东西,但是有可能是以前发生的,但我们没有检测到。这可能会导致难以置信的混乱结果。
Corona SDK正在使用Lua 5.1。
我们将此表json编码存储在文件中。重新启动应用程序后,该文件再次加载,并且仅包含一个条目!现在...该表仅包含“ id”和boolean,这两个值完全相同,但是我想知道如果这些值不同,将会发生什么?现在我想到了无数种情况。
我无法重现此问题,但是我们可以做什么:
tab[key] = value
编辑:好的,现在重现问题:
local d = {true}
d["1"]=true
for k,v in pairs(d) do
print(k,v)
end
1 true
1 true
实际上,在我添加了重现该问题的方法之后,很明显发生了什么。桌子变得一团糟。
当我这样做时:
for k,v in pairs(d) do
print(k,v, type(k))
end
这一切都说得通:
1 true number
1 true string
现在,我们唯一的问题是将json
模块Corona SDK
更改1
为"1"
字符串。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句