Lua将我的标识符转换为字符串,当我将它放入表格中?

a = {}
b = "s"
a.b = "white"
a["s"] = 2
local keyset={}
local n=0

for k,v in pairs(a) do
    n=n+1
    keyset[n]=k
    print(type(k))
-- 输出为 String(x2)
end

如果我执行 a.b,Lua会将b识别为一个字符串而不是一个标识符吗?

点赞
用户12420563
用户12420563

从 Lua 文档中:

初学者常犯的一个错误是将 a.x 和 a[x] 混淆。第一个形式表示 a["x"],即以字符串"x"为索引的表。第二个形式是以变量x的值为索引的表。

如果有人想要补充为什么 Lua 这样做,可以自由地添加!然而,这个问题在这一点上已经得到了回答。

更新: 在 for 循环之前,a = {['b'] = 'white', ['s'] = 2}

2020-10-17 14:33:15
用户3342050
用户3342050

请忘记 keyset 表; 它并没有转换任何东西。


a = {}
b = "s"  --  完全不同的变量,不在 a 中使用

a.b = "white"  --  语法糖,等同于 a["b"] = "white"
a["s"] = 2  --  变量 b 恰好拥有和此键相同的值,所以可以匹配

--  此时在 a 中有两个条目
--  a["b"] = "white" 和 a["s"] = 2

for k, v in pairs( a ) do
    print( 'key:', k, type(k), '  val:', v, type(v) )
end

print( b, a[b] )  --  从 a["s"] 检索值,巧合的键符合条件

输出结果为: key: s string val: 2 number key: b string val: white string s 2

2020-10-21 06:52:34