调用时未在表中使用表作为变量名

时间:2019-01-13 10:54:52

标签: variables lua lua-table

我正在做相当复杂的事情,并且我试图将表用作变量名,因为我发现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。

1 个答案:

答案 0 :(得分:2)

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

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