在 Lua 中使用表格作为变量名称时,调用时找不到表格

我正在制作相当复杂的东西,尝试将表格用作变量名称,因为我发现 Lua 可以实现,即:

lua
{[{1,2}]="Meep"}

问题是,当我这样做并尝试使用相同类型的表格调用它时,它无法找到它。

我已经尝试找到它之类的事情,但我不知道为什么它不会这样做。

lua
local c = {[{1,2}]="Meep"}
print(c[{1,2}],c)

虽然我期望得到

"Meep",{[{1,2}]="Meep"}

但实际上得到的是

nil,{[{1,2}]="Meep"}

但是,如果我尝试

lua
local m={1,2}
local c = {[m]="Meep"}
print(c[m],c)

它就变成了正确的结果,是否有办法避免这个中间人?毕竟 m=={1,2} 将返回 true。

点赞
用户9185797
用户9185797

问题在于lua 中的表被表示为引用。如果你比较两个不同的表,则比较的是这些引用。因此,只有当给定的表完全相同时,等式才会得到 true

t = { 1, 2, 3 }
t2 = { 1, 2, 3 }
print(t == t) -- true
print(t2 == t) -- false
print(t2 == t2) -- true

由于这个事实,你可以按引用将它们传递给函数。

function f(t)
    t[1] = 5
end

t2 = { 1 }
f(t2)
print(t2[1]) -- 5

为了绕过这种行为,你可以(像评论中建议的那样)在使用它作为键之前对表进行序列化。

2019-01-13 13:29:17