调用时找不到 table 中的变量名称 table

Using a table for variable name in a table is not found when called for

我正在做相当复杂的事情,我正在尝试使用 tables 作为变量名,因为我发现 lua 可以使用它,即:

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

问题是它是可调用的,当我这样做并尝试使用相同类型的 table 调用它时,它找不到它。

我试过寻找它等等,但我不知道为什么它不会这样做。

ua
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} 会 return 为真。

您遇到的问题是 lua 中的 table 被表示为引用 。如果您比较两个不同的表格,您就是在比较这些参考文献。因此,如果给定的 table 完全相同,方程式只会得到 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

要绕过此行为,您可以(如评论中建议的那样)在将 table 用作密钥之前对其进行序列化。