首页 > 解决方案 > 调用时未找到在表中使用表作为变量名

问题描述

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

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

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

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

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}会返回true。

标签: variableslualua-table

解决方案


您遇到的问题是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

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


推荐阅读