有人告诉我为什么这不起作用?
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
无法正常工作?
答案 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 = {}
文体说明:你应该只对常量使用全大写字母名称,否则太多会使代码难以阅读