【问题标题】:Lua table - two entries with same keyLua 表 - 两个具有相同键的条目
【发布时间】:2016-03-07 21:04:12
【问题描述】:

我不知道怎么做,但我们设法创建了一个包含两个完全相同的键的表。在对表的pairs 执行for 循环并打印我们得到的键和值时:

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”和布尔值,两个值完全相同,但我想知道如果值不同会发生什么,哪一个会保留?我现在想到了很多场景。

我无法重现此问题,但我们该怎么做:

  1. 用json读取文件
  2. 将json解码成lua表
  3. 在表中添加/更新条目,只需tab[key] = value
  4. 保存文件

编辑: 好吧,现在重现这个问题:

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


1   true
1   true

【问题讨论】:

    标签: json lua coronasdk lua-table


    【解决方案1】:

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

    当我这样做时:

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

    一切都说得通:

    1   true    number
    1   true    string
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-09
      • 1970-01-01
      • 2021-10-21
      • 2023-03-29
      • 1970-01-01
      • 2020-11-26
      相关资源
      最近更新 更多