Lua改变表键

有人能告诉我为什么这段代码不起作用吗?

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 函数上,不起作用了?

点赞
用户501250
用户501250

%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
2014-08-16 11:03:04
用户869951
用户869951

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

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

注意,我不得不初始化 ID 和 RETURN_TABLE 对象如下:

ID = 'ID'
RETURN_TABLE = {}

风格上的提示:你应该只为常量使用全大写名称,否则太多会使代码难以阅读。

2014-08-28 04:37:44