当前位置:  开发笔记 > 编程语言 > 正文

Lua表 - 具有相同键的两个条目

如何解决《Lua表-具有相同键的两个条目》经验,为你挑选了1个好方法。

我不确定如何,但我们设法创建一个两个键完全相同的表.当执行表的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"和boolean,这两个值完全相同,但我想知道如果值不同会发生什么,哪一个会保留?现在我想到了很多场景.

我无法重现这个问题,但我们做了什么:

    用json读取文件

    将json解码为lua表

    简单地在表中添加/更新条目 tab[key] = value

    保存存档

编辑:嗯,现在重现这个问题:

local d = {true} 
d["1"]=true 
for k,v in pairs(d) do 
    print(k,v) 
end


1   true
1   true

Krystian.. 9

实际上,在我添加了重现问题的方法之后,很明显发生了什么.桌子变得混杂起来.

当我做的时候:

for k,v in pairs(d) do 
    print(k,v, type(k)) 
end

一切都有道理:

1   true    number
1   true    string

我们现在唯一的问题是将更改后的数字json模块转换为字符串.Corona SDK1"1"



1> Krystian..:

实际上,在我添加了重现问题的方法之后,很明显发生了什么.桌子变得混杂起来.

当我做的时候:

for k,v in pairs(d) do 
    print(k,v, type(k)) 
end

一切都有道理:

1   true    number
1   true    string

我们现在唯一的问题是将更改后的数字json模块转换为字符串.Corona SDK1"1"

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有