调用时找不到 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 用作密钥之前对其进行序列化。
我正在做相当复杂的事情,我正在尝试使用 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 用作密钥之前对其进行序列化。