Lua表 - 具有相同键

时间:2015-12-03 09:55:58

标签: json lua corona lua-table

我不确定如何,但我们设法创建一个两个键完全相同的表。当执行for循环表pairs并打印键和值时,我们得到:

1    true
1    true

我们认为这可能是不同类型或类似问题,因此我们决定将其转换为json(我们使用Corona SDK和内部json模块)。

结果非常惊人:

"ourTable" : { "1" : true, "1" : true }

我们将其存储在一个文件中以检查值,"1"的十六进制值均为31

所以另一个测试:将json转换为lua表并且......与之前的结果相同:两个具有相同键的条目。

我以前从未见过这样的事情,说实话,我不知道如何发现和预防这种情况。 我们一直在使用lua&日冕几年,它是我们第一次发现这样的事情,但它可能以前发生过,而我们却没有发现。这可能会导致一些令人难以置信的错误结果。

Corona SDK正在使用Lua 5.1。

我们将此表json编码存储在一个文件中。重新启动应用程序后,文件再次加载,它只包含单个条目!现在......这张表只包含" id"和布尔值,这两个值完全相同,但我想知道如果值不同会发生什么,哪一个会保留?现在我想到了很多场景。

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

  1. 使用json
  2. 读取文件
  3. 将json解码为lua table
  4. 在表格中添加/更新条目,只需tab[key] = value
  5. 保存文件
  6. 编辑: 那么,现在重现这个问题:

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

1 个答案:

答案 0 :(得分:8)

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

当我这样做时:

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

这一切都有道理:

1   true    number
1   true    string

我们现在唯一的问题是json中的Corona SDK模块将1号码更改为"1"字符串。