我正在做相当复杂的事情,并且我试图将表用作变量名,因为我发现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。
答案 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
要绕过此行为,您可以(如注释中建议的那样)在将表用作键之前对其进行序列化。