【问题标题】:Lua Changing Table KeysLua 更改表键
【发布时间】:2014-08-16 10:44:23
【问题描述】:

谁能告诉我为什么这不起作用?

GET_TABLE {1=ID}
key = string.format("%q", GET_TABLE[1])
RETURN_TABLE[key] = "ss"
print(RETURN_TABLE[ID])
print(GET_TABLE[1])

第一个print 结果:nil。第二个print 结果:ID

我希望第一个 print 结果是:ss

GET_TABLE {1=ID}
key = "ID"
RETURN_TABLE[key] = "ss"
print(RETURN_TABLE[ID])
print(GET_TABLE[1])

以上工作正常,所以我认为这是由于string.format 工作不正常?

【问题讨论】:

  • 为什么不打印 string.format 的结果,这样你就可以看到你得到了什么,然后修复它?
  • GET_TABLE {1=ID} GET_TABLE(),并将给定的表文字作为唯一参数。您是否缺少等号,或者您是否真的调用了一个函数然后尝试对其进行索引?
  • 顺便说一下,在 Lua 中,表键可以是 any 类型,除了nil,因此format 可能不是您想要做的必需品。

标签: lua lua-table array-key


【解决方案1】:

%q 格式标记将输入作为转义和引用的 Lua 字符串返回。这意味着给定输入 ID 它将返回 "ID" (双引号是字符串的一部分!)这是一个不同的字符串。 (或者,表示为Lua字符串,输入为'ID',返回值为'"ID"'。)

因此,您在尝试检索 "ID" 密钥(可能不存在)时设置了 ID 密钥。

> x = 'ID'
> =x
ID
> =string.format('%q', x)
"ID"
> =#x
2
> =#string.format('%q', x)
4

【讨论】:

    【解决方案2】:

    您的代码无法编译(您需要在索引周围使用 []),并且您应该使用 ID 的原始字符串,而不是“引用”字符串:

    GET_TABLE = {[1]=ID}
    key = string.format("%s", GET_TABLE[1])
    

    请注意,我必须将 ID 和 RETURN_TABLE 对象初始化为以下内容:

    ID = 'ID'
    RETURN_TABLE = {}
    

    风格说明:您应该只对常量使用全大写名称,否则太多会使代码难以阅读

    【讨论】:

      猜你喜欢
      • 2021-09-09
      • 2021-07-01
      • 1970-01-01
      • 2014-11-27
      • 2022-01-21
      • 1970-01-01
      • 2019-09-13
      • 2021-11-13
      • 1970-01-01
      相关资源
      最近更新 更多