Lua更改表键

时间:2014-08-16 10:44:23

标签: lua lua-table array-key

有人告诉我为什么这不起作用?

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无法正常工作?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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

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

ID = 'ID'
RETURN_TABLE = {}

文体说明:你应该只对常量使用全大写字母名称,否则太多会使代码难以阅读